Как работать со строками, которые считали из файла? - 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
перебираются все символы в строке, начиная с последнего символа вхождения подстроки, и копируются в результат. - В конце функции добавляется нулевой символ в результат.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д