0 / 0 / 0
Регистрация: 14.07.2019
Сообщений: 19
1

Подсчет слов

14.07.2019, 17:12. Показов 2636. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Посмотрите плиз, что не так с кодом. Бред скорее всего. Прога и работает, и нет одновременно. Смотря, что ввожу.


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
#include <iostream>
#include <cstring>
 
int main ()
{
    using namespace std;
    setlocale (0, "");
    cout << "Программа подсчитывает слова (для завершение напишите "done") " << endl;
    char word [100];
    int sum = 0;
    cout << endl;
    
    do
    {
        cin >> word; // Случайно этот прикол нашел.  Все эти штуки типо cin читают строку до нулевого символа, а пробел
        sum ++;      // и расценивается, как нулевой. Т.е. с каждым нажатием пробела новое слово.
                // Хочется в это верить, лол
    }
    while (strcmp (word , "done") == true);
    
    cout << endl;
    cout << "Вы ввели " << sum - 1 << " слов";
    
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2019, 17:12
Ответы с готовыми решениями:

Подсчёт слов в строке. Подсчёт символов в словах строки
Начал изучение строк в С++. Решая задачу по поиску количества строк и количеству указанных символов...

Ввод слов в массив и подсчёт введённых слов
как можно решить эту задачу:Напишите программу,использующую массив char и цикл для чтения по одному...

Подсчет слов в тексте
Помогите сделать в програме подсчет независимо от регистра букв. #include &lt;stdio.h&gt; #include...

Подсчет количества слов
Есть два файла, 1.txt и 2.txt Задание: 1) Скопировать в файл 2.txt только те строки из...

6
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
14.07.2019, 18:20 2
Лучший ответ Сообщение было отмечено Denis-dunno как решение

Решение

Как вариант, можно так:
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
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
 
int main ()
{
char word[100], M, *p;
int sum = 0;
 
setlocale(0, "");
cout << "Программа подсчитывает слова (для завершение напишите 'done')\n";
 
do
{
    cout << "Введите строку:\n";
    cin.getline(word, 99);
    p = strtok(word, " ,.-");
    sum = 1;
    while(p)
    {
        p = strtok(0, " ,.-");  //До пробела
        sum++;
    }
 
    cout << "\nВы ввели " << sum-1 << " слов\n";
}
while(strcmp(word, "done") != 0);
 
system("pause");
return 0;
}
Только вот мне интересно, strtok создает строки в памяти и возвращает указатель p. Эти строки потом освободят память после завершения программы?
1
6089 / 3447 / 1402
Регистрация: 07.02.2019
Сообщений: 8,760
14.07.2019, 18:28 3
Цитата Сообщение от FFPowerMan Посмотреть сообщение
strtok создает строки в памяти и возвращает указатель p.
Ничего он не создает, эта функция разрезает исходную строку путем замены разделителя на '\0'
0
0 / 0 / 0
Регистрация: 14.07.2019
Сообщений: 19
14.07.2019, 20:05  [ТС] 4
Если не в лом, можешь рассказать про strtok плиз? Я почитал, не совсем понял. Эта функция ищет определенные символы в строке, так? И если находит - возвращает указатель. Если нет - возвращает пустой указатель или же false. Верно?
0
easybudda
14.07.2019, 20:51
  #5

Не по теме:

Цитата Сообщение от Denis-dunno Посмотреть сообщение
Прога и работает, и нет одновременно.
Код Шрёдингера...

0
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
15.07.2019, 12:14 6
Лучший ответ Сообщение было отмечено Denis-dunno как решение

Решение

На самом деле и ваша задумка будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <Windows.h>
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    char word[100];
    unsigned int words = 0;
    cout << "Подсчёт слов. Для завершения напишите done;\n>";
    while (strcmp(word, "done") != 0)
    {
        cin >> word;
        words++;
    }
    cout << "Всего слов: " << --words; // - без done
 
    return 0;
}
Добавлено через 43 секунды
Цитата Сообщение от Denis-dunno Посмотреть сообщение
Смотря, что ввожу
Можете навести примеры проблемного ввода?

Добавлено через 3 минуты
Цитата Сообщение от Denis-dunno Посмотреть сообщение
while (strcmp (word , "done") == true);
Если строки лексикографически равны, то функция strcmp() возвращает 0, в других случаях числа больше или меньше 0, по этому писать тут true или false не совсем правильно.
0
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
15.07.2019, 20:16 7
Лучший ответ Сообщение было отмечено Denis-dunno как решение

Решение

Цитата Сообщение от Denis-dunno Посмотреть сообщение
Эта функция ищет определенные символы в строке, так
В принципе, технически да, функция разбивает строку на лексемы, то есть части, разделенные определенными символами.
Возвращает указатель на первый символ лексемы, если найдено, в противном случае возвращает NULL.
Например, лексемами могут быть слова, разделенные пробелами.
1
15.07.2019, 20:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.07.2019, 20:16
Помогаю со студенческими работами здесь

Подсчет слов в файле.
Помогите решить задачку... Прочитать файл и подсчитать число слов в файле.Слово считается от...

Подсчет слов с файле
Как подружить эти 2 кода? (в с++ разбираюсь не очень хорошо) #include &quot;pch.h&quot; #include &lt;iostream&gt;...

Подсчет слов в предложениях
Здравствуйте! При написании исходника столкнулся с проблемой подсчета слов. Где может быть ошибка?...

Подсчет слов в предложении
Написала программу, но в ней есть ошибка. Самой найти не получается, программа считает знак...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru