Самая длинная последовательность в строке не используя числовые переменные - 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; }
Решение задачи: «Самая длинная последовательность в строке не используя числовые переменные»
#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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д