Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
27.04.2013, 21:12     Подсчет слов, введенных с клавиатуры #1
Есть такая практическая задача, надо написать прогу, которая считает слова при вводе их с клавиатуры, притом в несколько строк и прекращать подсчет при встрече слова "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; 
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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;
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
28.04.2013, 16:15  [ТС]     Подсчет слов, введенных с клавиатуры #3
Этот код работает, но я не могу понять почему. cin записывает в s по одному символу, увеличивая count, или всю строку сразу? По результату программы видно что читает строку до пробела, и прибавляет к count если не done, но по идее же все остальные слова в строке должны пропасть и только новый ввод после ентера должен записываться в s. Если не трудно то объясните плиз, а то эта тема посимвольной читки мне что-то трудно дается.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.04.2013, 17:18     Подсчет слов, введенных с клавиатуры #4
Цитата Сообщение от faradej Посмотреть сообщение
cin записывает в s по одному символу
Нет, он читает до символа разделителя - пробела, переноса строки.
Цитата Сообщение от faradej Посмотреть сообщение
по идее же все остальные слова в строке должны пропасть
Почему? Ну, если образно, то, например, я ввел строку
aa bb cc
первый вызов >>s взял данные введенные с терминала до пробела (aa) и записал в переменную. Следующий вызов видит, что данные еще есть и записывает bb в s. Третий вызов тоже обнаруживает есть еще не обработанные данные в потоке и записывает cc в s. Следующий вызов >>s видит, что данных больше нема и дает пользователю снова их ввести.
faradej
0 / 0 / 0
Регистрация: 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; 
}
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.04.2013, 10:48     Подсчет слов, введенных с клавиатуры #6
Цитата Сообщение от faradej Посмотреть сообщение
А почему используется указатель, а не обычный массив?
"обычный массив" это и есть указатель.
Цитата Сообщение от faradej Посмотреть сообщение
Например это пример переделаный на string, работает без указателей
Ииии? Вариант "а просто мне так захотелось" тоже надо в расчет брать. Не вижу причин бегать от указателей, они не кусаются.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 21:56     Подсчет слов, введенных с клавиатуры
Еще ссылки по теме:

Подсчет количества введенных с клавиатуры чисел C++
C++ Подсчет числа слов во введенных данных
Решение уравнений введенных с клавиатуры C++

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

Или воспользуйтесь поиском по форуму:
faradej
0 / 0 / 0
Регистрация: 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 минуту
Уже нашел в чем была проблема, спасибо
Yandex
Объявления
02.05.2013, 21:56     Подсчет слов, введенных с клавиатуры
Ответ Создать тему
Опции темы

Текущее время: 16:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru