Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
faradej
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
1

Подсчет слов, введенных с клавиатуры

27.04.2013, 21:12. Просмотров 676. Ответов 6
Метки нет (Все метки)

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

привет здаров как дела<enter>
нормально тыры пыры done<enter>
итого 7 слов

И это все надо без использования if else, до этой темы не дошел, с использование strcmp().
Ниже я пробовал что-то реализовать, думаю что задумка правильная, но из-за незнания механики что-то упускаю. Помогите плиз, а то уже часа 2-3 мозг кипит.

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
// strtype1.cpp -- using the C++ string class
#include <iostream>
#include <string>               // make string class available
#include <cstring>
#include <cstdlib>
#include "stdafx.h"
#include <array>
using namespace std;
 
int main()
{
    using namespace std;
    char ch;
    char qwe = 'done';
    int count = 0;
    int opa = 10;
    char joom[20][1] = {'q', 'w'};
    int result = 1;
    cout << "Vvedite slova\n";
    cin.get(ch);        // use the cin.get(ch) function
    while(result != 0){
        result = strcmp(joom[0], joom[1]);
    while (ch != ' ')
    {
        joom[count][0] = ch;
        cin.get(ch);    // use it again 
        ++count;
    };
    };
    cout << joom[0] << count << " characters read\n";
    system ("pause");
    return 0; 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2013, 21:12
Ответы с готовыми решениями:

Подсчет количества введенных с клавиатуры чисел
Реализовать ввод чисел с клавиатуры и подсчёт их длинны

Подсчет числа слов во введенных данных
Приветствую. Имеется задание: напишите программу, которая должна вычислить,...

Подсчитать сколько слов HELLO среди введенных слов в строке
Пользователь вводит строки, пока не введёт слово &quot;exit&quot;. Программа...

Строка, введенная пользователем, состоит из слов, разделенных запятой. Подсчитать и вывести на экран количество введенных слов
Задание: Строка, введенная пользователем, состоит из слов, разделенных запятой....

Подсчет введенных символов
Всем добрый день. Начал изучать С++ (чисто для себя) по книгде Г. Шилдта - &quot;С++...

6
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
27.04.2013, 21:25 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
    char *s =  new char[256];s[0]='a';
    int count = -1;
    while(strncmp(s, "done", 4) != 0) std::cin>>s, count++;
    std::cout<<count<<std::endl;
    delete []s;
1
faradej
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
28.04.2013, 16:15  [ТС] 3
Этот код работает, но я не могу понять почему. cin записывает в s по одному символу, увеличивая count, или всю строку сразу? По результату программы видно что читает строку до пробела, и прибавляет к count если не done, но по идее же все остальные слова в строке должны пропасть и только новый ввод после ентера должен записываться в s. Если не трудно то объясните плиз, а то эта тема посимвольной читки мне что-то трудно дается.
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
28.04.2013, 17:18 4
Цитата Сообщение от faradej Посмотреть сообщение
cin записывает в s по одному символу
Нет, он читает до символа разделителя - пробела, переноса строки.
Цитата Сообщение от faradej Посмотреть сообщение
по идее же все остальные слова в строке должны пропасть
Почему? Ну, если образно, то, например, я ввел строку
aa bb cc
первый вызов >>s взял данные введенные с терминала до пробела (aa) и записал в переменную. Следующий вызов видит, что данные еще есть и записывает bb в s. Третий вызов тоже обнаруживает есть еще не обработанные данные в потоке и записывает cc в s. Следующий вызов >>s видит, что данных больше нема и дает пользователю снова их ввести.
1
faradej
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
28.04.2013, 17:50  [ТС] 5
Понятно. А почему используется указатель, а не обычный массив? Простой нельзя очистить для перезаписи или что?

Добавлено через 8 минут
Например это пример переделаный на string, работает без указателей
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    using namespace std;
    cout << "Vvedite slova\n";
    string s;
    string w = "done";
    int count = -1;
    while( s != "done") cin>> s, count++;
    std::cout<<count<<std::endl;
   //cout << joom[0] << count << " characters read\n";
    system ("pause");
    return 0; 
}
0
Vourhey
Почетный модератор
6492 / 2266 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
29.04.2013, 10:48 6
Цитата Сообщение от faradej Посмотреть сообщение
А почему используется указатель, а не обычный массив?
"обычный массив" это и есть указатель.
Цитата Сообщение от faradej Посмотреть сообщение
Например это пример переделаный на string, работает без указателей
Ииии? Вариант "а просто мне так захотелось" тоже надо в расчет брать. Не вижу причин бегать от указателей, они не кусаются.
1
faradej
0 / 0 / 1
Регистрация: 25.04.2013
Сообщений: 67
02.05.2013, 21:56  [ТС] 7
Снова наткнулся на задачу с перебором символов . В этот раз надо подсчитать сколько слов начинается с гласных, согласный и сколько с остальных. Если ввожу только буквы, то все считается нормально, но если начинаю вводить символы и через пробел цифры, в разных комбинациях, то получается бред в результате подсчета. Объясните плиз что я не учел.

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
int main()
{
    using namespace std;
    cout << "vvedite slova: " << endl ;
    char *s =  new char[256];s[0]='a';
    int glasnaya = 0;
    int soglasnaya = 0;
    int other = 0;
    while(strncmp(s, "q", 4) != 0 ) 
    {
        cin >> s;
        if(isalpha(s[0]))
        {
            if(s[0] == 'a' || s[0] == 'e' || s[0] == 'i' || s[0] == 'o' ||s[0] == 'u' || s[0] == 'y')
            {
            glasnaya = glasnaya + 1;
            }
            else
            {
            soglasnaya = soglasnaya + 1;
            }
        }
        if(isspace(s[0])){break;}
        other = other + 1;
        
    }
    cout << "Kolichestvo glasnih bukv: " << glasnaya << endl;
    cout << "Kolichestvo soglasnih bukv: " << glasnaya << endl;
    cout << "Ostalnih simvolov: " << other << endl;
 
    cout << s;
    delete[]s;
    system ("pause");
    return 0; 
}
Добавлено через 41 минуту
Уже нашел в чем была проблема, спасибо
0
02.05.2013, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 21:56

Подсчет введенных строк
Доброго времени суток. Задача такова: ввести с клавиатуры текст неопределенного...

Не работает подсчет суммы введенных чисел
#include &lt;iostream&gt; using namespace std; int main() { std::cout &lt;&lt; 'Enter...

Введение массива пользователем и подсчет введенных элементов
Кто нибудь! Пожалуйста! Нужна помощь!! Как подсчитать количество элементов в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru