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

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

22.09.2018, 19:20. Показов 8297. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru