Программа для нахождения самого длинного слова в тексте - Запись символа в конец строки - C (СИ)

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

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

Работающая программа для нахождения самого длинного слова в тексте. Но хотелось бы, чтобы она параллельно записывала самое длинное слово. Думал задать пустую строку и туда записывать символы по порядку вот на этом моменте:
 if (((ch >= 'A')&&(ch <= 'Z')) || ((ch >= 'a')&&(ch <= 'z'))) 
            {   
                bword = 1;
Но реализовать не могу...
#include <stdio.h>
 
unsigned short main()
{
 
FILE *fl;
 
char ch;
unsigned char bword;
unsigned char maxword = 0;
unsigned char lenword = 0;
 
fl = fopen("Ekz1.txt","r");
 
   if (fl == NULL) 
       {
          perror("Error in opening file");
          return(-1);
       }
    
    while (!(feof(fl)) )
       {
        ch=fgetc(fl);
 
            if (((ch >= 'A')&&(ch <= 'Z')) || ((ch >= 'a')&&(ch <= 'z'))) 
            {   
                bword = 1;
            } 
            else
                bword = 0;
 
            if (bword == 1)    
            lenword+=1;
            else if((bword == 0)&&(lenword != 0)&&(lenword >= maxword))
                {          
                   maxword = lenword;
                   lenword = 0;
                   sf[50]=st[50];
                   st[50]=" ";
                }
                else lenword = 0;
       }
 
printf("%d", maxword);
fclose(fl);
return (0);
}

Решение задачи: «Программа для нахождения самого длинного слова в тексте - Запись символа в конец строки»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    FILE *fl;
    char ch, st[80] = "", sf[80] = "";
    int maxword = 0, bword = 0, lenword = 0, i = 0;
    fl = fopen("file1.txt","r");
    if (fl == NULL){
        perror("Error in opening file");
        return(1);
    }
    while(1){
        ch=fgetc(fl);
        if (((ch >= 'A')&&(ch <= 'Z')) || ((ch >= 'a')&&(ch <= 'z'))){
            bword = 1;
            st[i] = ch;
            ++i;
            lenword++;
        }
        else
            bword = 0;
        if(!bword || !ch){
            if(lenword > maxword){
                maxword = lenword;
                sf[maxword] = '\0';
                for(i = maxword - 1; i >= 0; --i)
                    sf[i] = st[i];
                }
            i = 0;
            lenword = 0;
        }
        if(ch == EOF)break;
    }
    printf("%d\n", maxword);
    puts(sf);
    fclose(fl);
    return (0);
}

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

  1. Включаем необходимые заголовочные файлы
  2. Открываем файл для чтения
  3. Проверяем успешность открытия файла
  4. При успешном открытии файла, начинаем чтение символов из него
  5. Проверяем каждый символ на принадлежность к слову
  6. Если символ принадлежит слову, увеличиваем счетчик слова и записываем символ в строку
  7. Если символ не принадлежит слову, сбрасываем счетчик слова и очищаем строку
  8. Если слово закончено (достигнут конец файла или пробел), проверяем длину слова
  9. Если длина слова больше максимальной, обновляем максимальную длину и копируем слово в строку максимальной длины
  10. Сбрасываем счетчик слова и длину слова, продолжаем чтение файла
  11. Закрываем файл после окончания чтения
  12. Выводим на экран длину максимального слова и само максимальное слово

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


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

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

12   голосов , оценка 4 из 5
Похожие ответы