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

  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
Похожие ответы