Самая длинная последовательность в строке не используя числовые переменные - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно найти в строке и вывести на экран самую длинную последовательность одинаковых подряд идущих символов и их количаство, я это зделал но следующее задание переделать с использованием указателей вместо числовых переменных, сделал все что смог, но все равно остались переменные, подскажите как от них избавиться. код
#include<stdio.h>
#include<string.h>
#define A 80
void chomp(char buf[])
{
    if(buf[strlen(buf)-1]=='\n')
    buf[strlen(buf)-1]=0;
}
int main()
{
    int i=0,temp=0,max=0,quantity=0;
    char line[A]={0},*index,*basket;
    printf("Enter a line of the text\n");
    fgets(line,A,stdin);
    chomp(line);
    index=line;
    while(!(temp==1&&(*basket!=*(basket-1))))
    {
        if(temp==0)
        {
            ++quantity;
            if((index[i]!=index[i+1]||!index[i+1])&&max<quantity)
            {
                max=quantity;
                quantity=0;
                basket=&index[i-(max-1)];
            }
            if(index[i]!=index[i+1])
            {
                quantity=0;
            }
            if(!index[i+1])
            {
                temp=1;
            }
        }
        if(temp==1)
        {
            putchar(*basket++);
        }
        i++;
    }
    printf(" %d\n",max);
    return 0;
}

Решение задачи: «Самая длинная последовательность в строке не используя числовые переменные»

textual
Листинг программы
#include<stdio.h>
 
void Print(char *s, char *end)
{
   for(; s < end; ++s)
      putchar(*s);
   putchar('\n');
}
 
int Max(char *s)
{
   char *beg, *end, *a;
   beg = end = s;
   while(*s)
   {
       a = s;
       ++s;
       while(*s == *a)
          ++s;
       if (s - a > end - beg)
       {
          beg = a;
          end = s;
       }
   }
   Print(beg, end);
   return end - beg;
}
 
int main()
{
   char s[1024];
   fgets(s, 1024, stdin);
   printf("max = %d\n", Max(s));
   return 0;
}

Объяснение кода листинга программы

В этом коде представлена функция Max, которая принимает строку s и возвращает длину самой длинной подстроки. Функция сначала инициализирует указатели beg и end на первый символ строки s. Затем она проходит по каждому симвопу строки, начиная со второго, и сравнивает каждый символ с символом, на который указывает указатель a. Если текущий символ равен символу, на который указывает a, то указатель a инкрементируется, чтобы пропустить повторяющийся символ. Если текущий символ не равен символу, на который указывает a, то это означает, что текущая подстрока, образованная символами от beg до a, является самой длинной подстрокой, которую мы видели до сих пор. В этом случае значение beg обновляется, чтобы указывать на первый символ текущей подстроки, а значение end обновляется, чтобы указывать на последний символ текущей подстроки. В конце функция Print вызывается с указателями beg и end, чтобы напечатать самую длинную подстроку. Значение max возвращается как длина самой длинной подстроки. В функции main создается массив символов s размером 1024, в который считывается строка с помощью функции fgets. Затем вызывается функция Max, передавая ей строку s, и результат выводится на экран с помощью функции printf.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы