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