Как работать со строками, которые считали из файла? - C (СИ)
Формулировка задачи:
передо мной стоит задача
Считать строки из файла(длинной не более 50 ),
потом удалить из них самое длинное слово, затем занести в очередь, буфер который может содержать до 10 элементов.
МНЕ ПОНЯТЬ БЫ как работать со строками ,которые мы получили из файла.
вот пока ,что я я сделала, очень нужна помощь , скоро экзамен ,а я не понимаю.
char prepare_file(char* fname) { FILE* fp; char* fname ="date.txt"; char buf[50]; fp= fopen(fname, "r"); if (fp == NULL) { printf("Can not open file %s'", fname); return 0; } do { fgets(buf, 50, fp); printf("%s", buf); } while (buf[0] != '\n'); fclose(fp);
Решение задачи: «Как работать со строками, которые считали из файла?»
textual
Листинг программы
void del_lonsest(char*str) { char delim[] = " \t\n,.?!;:", *first, *last, *p, *fmax, *lmax; int max = 0, flag = 0, sym = 1, j; for(p = str; *p; p++, sym = 1){ for(j = 0; delim[j]; j++) if(*p == delim[j]) sym = 0; if(sym){ if(!flag){ first = p; flag = 1; } } else{ if(flag){ last = p - 1; flag = 0; if(last - first > max){ max = last - first; fmax = first; lmax = last; } } } } for(lmax++; *lmax; ){ *fmax++ = *lmax++; } *fmax = '\0'; }
Объяснение кода листинга программы
- В функции
del_lonsest
происходит удаление дубликатов из строки, которая была считана из файла. - Переменная
delim
содержит разделители: пробел, табуляция, перевод строки, запятая, точка, вопросительный знак, восклицательный знак, точка с запятой, двоеточие и точка. - Переменная
first
содержит начало первого вхождения подстроки, которая повторяется в строке. - Переменная
last
содержит конец последнего вхождения подстроки, которая повторяется в строке. - Переменная
p
является указателем на текущий символ в строке. - Переменная
sym
используется для определения того, является ли текущий символ разделителем. - Переменная
flag
используется для определения того, найдено ли уже вхождение подстроки. - Переменная
max
содержит максимальное количество повторяющихся подстрок. - Переменная
fmax
используется для хранения указателя на первый символ вхождения подстроки в результат. - Переменная
lmax
используется для хранения указателя на последний символ вхождения подстроки в результат. - В цикле
for
перебираются все символы в строке. - В каждой итерации цикла проверяется, является ли текущий символ разделителем.
- Если текущий символ является разделителем, то проверяется, было ли найдено вхождение подстроки.
- Если вхождение подстроки найдено, то обновляется информация о первом и последнем вхождении подстроки.
- Если текущий символ не является разделителем, то проверяется, было ли найдено вхождение подстроки.
- Если вхождение подстроки найдено, то обновляется информация о первом и последнем вхождении подстроки.
- Если вхождение подстроки не найдено, то обновляется информация о первом и последнем вхождении подстроки.
- Если вхождение подстроки найдено, то обновляется информация о максимальном количестве повторений подстроки.
- Если текущий символ является последним символом в строке, то обновляется информация о последнем вхождении подстроки.
- В цикле
for
перебираются все символы в строке, начиная с последнего символа вхождения подстроки, и копируются в результат. - В конце функции добавляется нулевой символ в результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д