В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Хочу в файле, в каждой фразе(предполагается, что каждая фраза - это набор символов на каждой строке) найти слово наибольшей длинны и записать его в другой файл. Но вместо этого записывает что-то не понятное. Вот мои попытки, СИ изучаю только 3 месяца.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <locale.h>
  5. int main()
  6. {
  7. setlocale(LC_ALL,"Russian");
  8. int i,count=0,tcount=0,mc,ti,tj;
  9. char buff[100],tempbuff[100];
  10. FILE *f;
  11. FILE *f2;
  12. f = fopen("main.txt","r");
  13. f2 = fopen("new.txt","w");
  14. while(!feof(f))
  15. {
  16. i=0,count=0,tcount=0,mc=0,ti=0,tj=0;
  17. fgets(buff,100,f);
  18. while(buff[i]!='\0')
  19. {
  20. if(buff[i]!=' ') count++;
  21. else
  22. {
  23. if(count>tcount && count > mc){
  24. tj=i;
  25. ti=tj-count;
  26. mc = count;
  27. }
  28. tcount=count;
  29. }
  30. i++;
  31. }
  32. for(i=ti;i<tj;i++) tempbuff[i] = buff[i];
  33. fprintf(f2,"%s",tempbuff);
  34. }
  35. fclose(f);
  36. fclose(f2);
  37. system("pause");
  38. return 0;
  39. }
Помогите пожалуйста!

Решение задачи: «В каждом предложении файла найти слово наибольшей длинны и записать его в другой файл»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. static char* max_word(char* s);
  4. void out_max_words(FILE* _out, FILE* _in);
  5.  
  6. int main(void){
  7.     FILE* fin  = fopen("input.txt",  "r");
  8.     FILE* fout = fopen("output.txt", "w");
  9.     out_max_words(fout, fin);
  10.     fclose(fin);
  11.     fclose(fout);
  12. /*
  13.     FILE* fp = fopen("input.txt", "r");
  14.     out_max_words(stdout, fp);
  15.     fclose(fp);
  16. */
  17.     return 0;
  18. }
  19.  
  20. void out_max_words(FILE* _out, FILE* _in){
  21.     char* p, buf[512];
  22.     while((p = fgets(buf, sizeof(buf), _in)) != NULL){
  23.         p = max_word(p);
  24.         if(p != NULL)
  25.             fprintf(_out, "%s\n", p);
  26.     }
  27. }
  28.  
  29. //самое длинное слово
  30. static char* max_word(char* s){
  31.     int   k = 0, n = 0;
  32.     char* p = NULL;
  33.     do {
  34.         if(isalnum(*s) || (*s == '_'))
  35.             ++k;
  36.         else if(k > 0){
  37.             if(k > n){
  38.                 p = s - k;
  39.                 n = k;
  40.             }
  41.             k = 0;
  42.         }
  43.     } while(*s++ != '\0');
  44.  
  45.     if(p != NULL)
  46.         *(p + n) = '\0';
  47.     return p;
  48. }

Объяснение кода листинга программы

Вывод списка слов наибольшей длины из файла input.txt в файл output.txt:

  1. Объявлены две функции: out_max_words и max_word.
  2. В функции main открывается файл input.txt для чтения и файл output.txt для записи.
  3. Функция out_max_words принимает два аргумента: указатель на файл для записи и указатель на файл для чтения.
  4. В функции out_max_words используется цикл while, который считывает строку из файла, используя функцию fgets.
  5. Внутри цикла функция max_word вызывается для каждого слова в строке, чтобы найти самое длинное слово.
  6. Если самое длинное слово найдено, оно записывается в файл для записи.
  7. В функции main вызывается функция out_max_words с аргументами fout и fin.
  8. Файл fin закрывается, а затем файл fout закрывается.
  9. В функции max_word используется цикл do, чтобы пройти по каждому символу слова.
  10. Если текущий символ является буквой или подчеркиванием, увеличивается счетчик k.
  11. Если k больше нуля и текущий символ не является буквой или подчеркиванием, уменьшается значение k на величину n, и обновляется значение p и n.
  12. Если k больше нуля, значение k сбрасывается в ноль.
  13. После прохода по всем символам слова, если p не равно NULL, в p добавляется нулевой символ.
  14. В функции main открывается файл input.txt для чтения и вызывается функция out_max_words с аргументами stdout и fp.
  15. Файл fp закрывается.
  16. В функции main возвращается значение 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы