Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053

Написать программу, которая считывает текст из файла находит самое длинное слово

22.09.2018, 19:20. Показов 8336. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте
Но моя программа работает только с маленькими предложениями, (например She house. I love mathematics. But I don't like philosofi. Do you like!), и если введу больше символов, то выдает ошибку, как подкорректировать код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <fstream>
#include <cstring>
#include <string.h>
#include <ctype.h>
using namespace std;
int main()
{
 
    setlocale(LC_ALL, "rus");
    ifstream fin("text.txt");
    if (!fin)
    {
        cout << "Ошибка открытия файла";
        return 1;
    }
    fin.seekg(0,ios::end);
    const long len = 200;
    long len = fin.tellg();
    char *maxword = new char[len + 1];
    char *word = new char[len + 1];
    char *buf = new char[len + 1];
    fin.seekg(0, ios::beg);
    fin.read(buf,len);
    buf[len] = '\0';
    int i = 0, j = 0, k = 0, l = 0, wordlen = 0, maxwordlen = 0, wordcnt = 0;
    while(buf[i])
    {
        if (isalpha(buf[i]))
    {
        while(!(ispunct(buf[i])|| isspace(buf[i])|| (buf[i] == '\0')))
    {
        word[j++] = buf[i++];
    }
    word[j] = '\0';
    j = 0;
    wordlen = strlen(word); //возвращает длину строки
    cout << word/* <<'('<<wordlen<<')'*/;
        if(wordlen > maxwordlen)
    {
        maxwordlen = wordlen;
        strcpy(maxword, word); //копируем все символы строки
    }
    k = l = wordcnt = 0; 
    while(buf[k])
    {
        if (isalpha(buf[k]))
    {
        while(!(ispunct(buf[k])|| isspace(buf[k])|| (buf[k] == '\0')))
    {
        word[l++] = buf[k++];
    }
    word[l] = '\0';
    l = 0;
    if(strcmp(maxword,word) == 0) wordcnt++;
        }
        k++;
    }
}
    cout << buf[i];
    i++;
    }
    fin.close();
    cout << endl;
    cout << "Самое длинное слово: " << maxword << endl;
    cout << "Длина слова: " << maxwordlen << endl;
    cout << "Количество cлова: " << wordcnt << endl;
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.09.2018, 19:20
Ответы с готовыми решениями:

Написать программу, которая находит самое длинное слово, встречающееся в предложении
Задано предложение-строка. Написать программу, которая находит самое длинное слово, встречающееся в предложении. когда ввожу строку, а в...

Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз встретилось
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте. ...

написать программу, которая считывает текст с файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте
Нужно написать программу, которая считывает текст с файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.

19
115 / 83 / 43
Регистрация: 19.01.2018
Сообщений: 484
22.09.2018, 19:24
никмейн,
Цитата Сообщение от никмейн Посмотреть сообщение
const long len = 200;
возможно это?
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
22.09.2018, 19:40  [ТС]
Если я в текст ввожу в строку , то он работает
Миниатюры
Написать программу, которая считывает текст из файла находит самое длинное слово  
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
22.09.2018, 19:41  [ТС]
А если больше этого текста ввожу предложение или перехожу на другую строку, то выводит такая ошибка:
как этого избежать?
Миниатюры
Написать программу, которая считывает текст из файла находит самое длинное слово  
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
22.09.2018, 22:43
А в какой строке программы возникает ошибка?

И что значит
Цитата Сообщение от никмейн Посмотреть сообщение
А если больше этого текста ввожу предложение или перехожу на другую строку
?
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
22.09.2018, 22:52  [ТС]
Цитата Сообщение от likehood Посмотреть сообщение
И что значит
это значит, если я ввожу предложения в строку
She house. I love mathematics. But I don't like philosofi. Do you like! то он выводит результат, а если так
She house. I love mathematics. But I don't
like philosofi. Do you like! Он уже не ищет результат
мне нужно сначала задать кол-во символов?

Добавлено через 1 минуту
Цитата Сообщение от RostikTawer Посмотреть сообщение
const long len = 200
я убрал вообще
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
22.09.2018, 22:59
У меня оба варианта работают, находит слово mathematics.

Возможно, ошибка действительно есть, но у меня она не проявляется (использую CodeBlocks).
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
22.09.2018, 23:03  [ТС]
я использую VS 2010
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
27.09.2018, 18:00  [ТС]
Написал вот так, теперь все текст выводит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int maxsize = 200;
    char text[maxsize];
    char maxword[maxsize], wordlen = 0, count = 0;
    setlocale(LC_ALL, "rus");  
    ifstream fin("text.txt");
    if (!fin)
    {
        cout << "Ошибка открытия файла";
        return 1;
    }
    fin.getline(text,maxsize,EOF);
    int len = strlen(text);
    for(int i = 0; i < len; i++)
        cout << text[i];
        cout << endl;
теперь как быть жтим кодом и предыдущим?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
28.09.2018, 12:32
Цитата Сообщение от никмейн Посмотреть сообщение
Написал вот так, теперь все текст выводит
Цитата Сообщение от никмейн Посмотреть сообщение
теперь как быть жтим кодом и предыдущим?
Не очень понятно, в чём теперь заключается вопрос.

И ещё было бы неплохо увидеть новый исправленный код целиком.
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
30.09.2018, 20:50  [ТС]
Я написал код, который считывает только текст
She house. I love mathematics. But I don't
like philosofi. (он у меня не работал) теперь работает
Теперь мне нужно искать: Самое длинное слово, длина слова и сколько оно раз встречается в тексте
и никак не получается
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.09.2018, 22:42
Цитата Сообщение от никмейн Посмотреть сообщение
Теперь мне нужно искать: Самое длинное слово, длина слова и сколько оно раз встречается в тексте
и никак не получается
Чем не устраивает код из первого сообщения?

Я его внимательно не просматривал, но у меня он во всяком случае работает как задумано: находит самое длинное слово, его длину и сколько раз встречается.

Если первый код по какой-то причине не работает, то вроде ничто не мешает взять новый код считывания текста и вставить его в первую программу.
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
30.09.2018, 22:42  [ТС]
и как правильно вставить? чтоб не возникало ошибки
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.09.2018, 22:52
Цитата Сообщение от никмейн Посмотреть сообщение
и как правильно вставить?
Ctrl-C, Ctrl-V.

Цитата Сообщение от никмейн Посмотреть сообщение
чтоб не возникало ошибки
Если возникнут ошибки, то их можно исправить.

Как минимум, в первой программе текст считывается в переменную buf, а в последней - в переменную text. Что-то из них придётся переименовать.
1
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
04.10.2018, 15:18  [ТС]
Я переделал полностью код, все работает, кроме того, что не выводит самое длинное слово
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/* Вариант 15
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте */
 
#include "stdafx.h"
#include <cstring>
#include <string.h>
#include <iostream> 
#include <fstream> 
#include <Windows.h>
#include <ctype.h>
using namespace std;
int main() 
{
    setlocale(LC_ALL,"rus");
    const int maxsize = 200;
    char buffer[maxsize], word[maxsize]; 
    char delims[] = "..!?/<>|)(*:;\''";
    int size = 0, max = 0, count = 0;
    ifstream fin("text.txt"); 
    if(!fin)
    {
    cout << "Error  " << endl;
    return 1;
    }
    while (fin.getline(buffer, maxsize)) 
    { 
         cout << buffer << endl;
         size = strlen(buffer);
    } 
          if(size > max) 
           { 
                strcpy(word, buffer); 
                count = 1; 
                max = size;
 
            if(strcmp(word, buffer) == 0)
                count++; 
          }
        fin.close();
        cout << "Самое длинное слово: " << word << endl;
        cout << "Длина слова: " << size << endl;
        cout << "Количество вхождения: "<< count << endl;
        system("pause");
        return 0;
}
что я неправильно делаю?

Добавлено через 13 минут
и неправильно определяет длинное слово
препод первый код не принял
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.10.2018, 14:26
никмейн, функция getline считывает строку целиком, а не отдельные слова - поэтому алгоритм не работает.

Если нужно разбить строку на слова с учётом разделителей (знаков препинания и т.д.), то проще всего это сделать с помощью функции strtok. Вторым параметром этой функции задаётся строка разделителей.
0
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
07.10.2018, 20:50  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*Вариант 15
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте. */
 
#include "stdafx.h"
#include <iostream> 
#include <fstream> 
#include <conio.h>
#include <string>
using namespace std;
int main() 
{   
    setlocale(LC_ALL,"rus");
    const int len_text = 500;
    const int len_word = 50;
    char buffer[len_text],buffer1[len_text], word[len_word]; 
    char delims[] = " ..!?/<>|)(*:;\"";
    char *token;
    int max_len = 0, count_len = 0, size_len = 0;
    ifstream fin("text.txt");
    if(!fin) 
    {
        cout << "Ошибка открытия файла " << endl;
        return 1;
    }
    fin.getline(buffer,len_text ,EOF);
    for(int i = 0; i <= strlen(buffer); i++)
    cout << buffer[i];
    strcpy(buffer1,buffer);
    token = strtok(buffer,delims);
    while(token!= NULL)
    {
        if(!strcmp(token, buffer))count_len++;
        token = strtok(NULL,delims);
    }
    cout << endl;
           /*if (buffer[len_text] > max_len)
           {
               buffer[len_text] = max_len;
               strcpy(word, buffer);
           }*/
           fin.close();
     cout <<"Самое длинное слово: " << buffer << endl;
     cout <<"Длина слова: " << strlen(buffer) << endl;
     cout <<"Количество вхождения: "<< count_len << endl;
        system("pause");
        return 0;
}
можете подкорректировать код, определить самое длинное слово, длину слова, кол-во вхождения
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.10.2018, 21:18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*Вариант 15
Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте. */
 
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <cstring>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"rus");
    const int len_text = 500;
    const int len_word = 50;
    char buffer[len_text],buffer1[len_text], word[len_word];
    char delims[] = " ..!?/<>|)(*:;\"";
    char *token;
    int max_len = 0, count_len = 0, size_len = 0;
    ifstream fin("in.txt");
    if(!fin)
    {
        cout << "Ошибка открытия файла " << endl;
        return 1;
    }
    fin.getline(buffer,len_text ,EOF);
    //for(int i = 0; i < strlen(buffer); i++)
    //cout << buffer[i];
    cout << buffer << "\n";
    //strcpy(buffer1,buffer);
 
    cout << "\n========= WORDS ========\n\n";
 
    token = strtok(buffer,delims);
    while(token!= NULL)
    {
        cout << token << "\n";
        int len = strlen(token);
        if (len > max_len)
        {
            max_len = len;
            strcpy(word, token);
            count_len = 1;
        }
        else if (len == max_len)
        {
            if (strcmp(word, token) == 0)
                count_len++;
        }
 
        token = strtok(NULL,delims);
    }
    cout << "\n\n";
    fin.close();
 
    cout <<"Самое длинное слово: " << word << endl;
    cout <<"Длина слова: " << max_len << endl;
    cout <<"Количество вхождения: "<< count_len << endl;
 
    system("pause");
    return 0;
}
1
65 / 46 / 20
Регистрация: 24.10.2016
Сообщений: 1,053
07.10.2018, 22:22  [ТС]
он у вас кол-во вхождение неправильно считает: мой текст She house. I love mathematics. But I don't like philosofi. Do you like! mathematics.
mathematics.
он выводит 1, если там 3 раза встретилось
а если так написать в одну строку She house. I love mathematics. But I don't like philosofi. Do you like! mathematics. mathematics. то он правильно выводит: 3

Добавлено через 5 минут
проблема в разделите пробел, да?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.10.2018, 22:30
Цитата Сообщение от никмейн Посмотреть сообщение
проблема в разделите пробел, да?
В разделителе, но не пробеле, а символе '\n'. Его тоже нужно добавить в список разделителей.
C++
1
char delims[] = " \n..!?/<>|)(*:;\"";
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2018, 22:30
Помогаю со студенческими работами здесь

Написать программу, которая считывает текст из файла, находит самое длинное слово и определяет, сколько раз оно встретилось в тексте.
Нуждаюсь в помощи по JAVA,желательно с комментариями. 1) В одномерном массиве, состоящем из п вещественных элементов, вычислить: •...

Написать программу, которая находит самое длинное слово в предложении
Задано предложение, состоящее из слов-строк. Написать программу, которая находит самое длинное слово в предложении. Если таких...

Написать программу, которая находит самое длинное слово, встречающееся в предложении.
1.Задано предложение-строка. Написать программу, которая находит самое длинное слово, встречающееся в предложении. 2.В заданный непустой...

Написать программу, которая находит самое длинное слово, встречающееся в предложении
Задано предложение-строка. Написать программу, которая находит самое длинное слово, встречающееся в предложении.

Написать программу, которая находит самое длинное слово, встречающееся в предложении
Составить блок – схему алгоритма и программу к задаче на языке программирования Си. Задано предложение-строка. Написать программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru