В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл - C (СИ)
Формулировка задачи:
Здравствуйте.
Хочу в файле, в каждой фразе(предполагается, что каждая фраза - это набор символов на каждой строке) найти слово наибольшей длинны и записать его в другой файл.
Но вместо этого записывает что-то не понятное.
Вот мои попытки, СИ изучаю только 3 месяца.
Помогите пожалуйста!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() { setlocale(LC_ALL,"Russian"); int i,count=0,tcount=0,mc,ti,tj; char buff[100],tempbuff[100]; FILE *f; FILE *f2; f = fopen("main.txt","r"); f2 = fopen("new.txt","w"); while(!feof(f)) { i=0,count=0,tcount=0,mc=0,ti=0,tj=0; fgets(buff,100,f); while(buff[i]!='\0') { if(buff[i]!=' ') count++; else { if(count>tcount && count > mc){ tj=i; ti=tj-count; mc = count; } tcount=count; } i++; } for(i=ti;i<tj;i++) tempbuff[i] = buff[i]; fprintf(f2,"%s",tempbuff); } fclose(f); fclose(f2); system("pause"); return 0; }
Решение задачи: «В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> static char* max_word(char* s); void out_max_words(FILE* _out, FILE* _in); int main(void){ FILE* fin = fopen("input.txt", "r"); FILE* fout = fopen("output.txt", "w"); out_max_words(fout, fin); fclose(fin); fclose(fout); /* FILE* fp = fopen("input.txt", "r"); out_max_words(stdout, fp); fclose(fp); */ return 0; } void out_max_words(FILE* _out, FILE* _in){ char* p, buf[512]; while((p = fgets(buf, sizeof(buf), _in)) != NULL){ p = max_word(p); if(p != NULL) fprintf(_out, "%s\n", p); } } //самое длинное слово static char* max_word(char* s){ int k = 0, n = 0; char* p = NULL; do { if(isalnum(*s) || (*s == '_')) ++k; else if(k > 0){ if(k > n){ p = s - k; n = k; } k = 0; } } while(*s++ != '\0'); if(p != NULL) *(p + n) = '\0'; return p; }
Объяснение кода листинга программы
Вывод списка слов наибольшей длины из файла input.txt в файл output.txt:
- Объявлены две функции:
out_max_words
иmax_word
. - В функции
main
открывается файлinput.txt
для чтения и файлoutput.txt
для записи. - Функция
out_max_words
принимает два аргумента: указатель на файл для записи и указатель на файл для чтения. - В функции
out_max_words
используется циклwhile
, который считывает строку из файла, используя функциюfgets
. - Внутри цикла функция
max_word
вызывается для каждого слова в строке, чтобы найти самое длинное слово. - Если самое длинное слово найдено, оно записывается в файл для записи.
- В функции
main
вызывается функцияout_max_words
с аргументамиfout
иfin
. - Файл
fin
закрывается, а затем файлfout
закрывается. - В функции
max_word
используется циклdo
, чтобы пройти по каждому символу слова. - Если текущий символ является буквой или подчеркиванием, увеличивается счетчик
k
. - Если
k
больше нуля и текущий символ не является буквой или подчеркиванием, уменьшается значениеk
на величинуn
, и обновляется значениеp
иn
. - Если
k
больше нуля, значениеk
сбрасывается в ноль. - После прохода по всем символам слова, если
p
не равноNULL
, вp
добавляется нулевой символ. - В функции
main
открывается файлinput.txt
для чтения и вызывается функцияout_max_words
с аргументамиstdout
иfp
. - Файл
fp
закрывается. - В функции
main
возвращается значение 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д