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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Читать слова по одному за раз, пока не будет введена буква q - C++

02.09.2013, 14:28. Просмотров 529. Ответов 4
Метки нет (Все метки)

Необходимо написать программу, которая читает слова по одному за раз, пока не будет введена буква q. После этого программа должна сообщить, количество слов, начинающихся с гласных, количество слов, начинающихся с согласных и количество слов, которые начинаются с других символов (например с цифр).

Программа упрямо не хочет считать буквы в верхнем регистре, в нижнем иногда выдает правильно, иногда не досчитывает. Как решать?

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
void main()
{
    rus;
    short vowels = 0;  // гласные 
    short consonants = 0; // согласные
    short other = 0;
    char word[30]; // вводимые слова
    char arr[12] = 
    {'a','i','o','e','y','u','A','I','O','E','Y','U'};
    
    for (int i = 0; i < 30; i++)
    {
        while (word[0] != '#')
        {
            cout << "Введите слово (что бы закончить, введите #): ";
            cin >> word;
            if (isalpha(word[0]))
                if (word[0] == arr[1 < i && i < 12])
                    vowels++;
                else
                    consonants++;
            else 
                other++;
        }
    }
    cout << "\n\aГласных - " << vowels;
    cout << "\nСогласных - " << consonants;
    cout << "Других - " << other-1;
    system("pause");
}
И еще такой вопрос (немного не по теме): как написать программу, если задача состоит в том, что бы пользователь вводил не слова по очереди, и целое предложение? как определить начало слова?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2013, 14:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Читать слова по одному за раз, пока не будет введена буква q (C++):

Реализовать программу, которая читает слова по одному за раз, пока не будет введена отдельная буква q - C++
Напишите программу, которая читает слова по одному за раз, пока не будет введена отдельная буква q. После этого программа должна сообщить...

Составить программу, которая просит вводить буквы до тех пор, пока не будет введена буква y или Y - C++
На паре задали создать задачу: Составить программу, которая просит вводить буквы до тех пор, пока не будет введена буква y или Y. ...

Ввод чисел с клавиатуры до тех пор, пока не будет введена цифра 1 (цикл do) - C++
Используя оператор цикла do, составить программу, которая будет требовать ввод чисел с клавиатуры до тех пор, пока не будет введена цифра 1.

Найти слова, в которых первая буква присутствует только один раз, и слова капслоком - C++
Разработать алгоритм и программу. Вводится тест из заглавных и строчных латинских букв, пробелов. Количество символов в тексте не должно...

В заданном символьном массиве найти слова, в которых первая буква слова встречается в нём ещё 1 раз - C++
Дан символьный массив. Вывести на печать те слова, в которых первая буква слова встречается в нём ещё 1 раз. гуглил, искал, нету подобной...

Определить, имеются ли в последовательности слова, в которых каждая буква слова входит в него не менее двух раз - C++
Есть задача, никак не могу разобраться, помогите пожалуйста реализовать)) Определить, имеются ли в последовательности слова, в которых...

4
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,065
Завершенные тесты: 1
02.09.2013, 14:43 #2
Начало слова можно определить после того как был замечен пробел, если символ отличный от пробела- значит новое слово.

C++
1
2
3
4
5
6
7
8
9
char sentence[]="... ... ...";
int i = 0;
bool was_space = false;
while(true)
{
if(sentence[i]==' ') { was_space = true; ++i ; continue;}
if(was_space && (sentence[i] != ' ')) {was_space  = false;//тут началось новое слово}
++i;
}
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
word[0] == arr[1 < i && i < 12]
что тут вообще происходит?
1
Belfegor
Ghost
173 / 173 / 6
Регистрация: 16.09.2012
Сообщений: 526
02.09.2013, 16:42 #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <set>
#include <string>
#include <sstream>
#include <windows.h>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int vowels = 0, consonants = 0, others = 0;
    string str;
    set<string> set_vowels{
        {"А"},
        {"а"},
        {"О"},
        {"о"},
        {"У"},
        {"у"},
        {"Е"},
        {"е"},
        {"И"},
        {"и"},
        {"Ы"},
        {"ы"},
        {"Э"},
        {"э"},
        {"Я"},
        {"я"},
    };
    getline(cin, str);
    stringstream ss(str);
    while (ss >> str) {
        if (set_vowels.count(&str[0]))vowels++;
        else {
            if (isdigit(str[0]))others++;
            else {
                consonants++;
            }
        }
 
    }
    cout << "Гласных: " << vowels << endl;
    cout << "Согласных: " << consonants << endl;
    cout << "Других: " << others << endl;
 
    return 0;
}
наверно как то так
1
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
02.09.2013, 18:38  [ТС] #4
Цитата Сообщение от Raali Посмотреть сообщение
Начало слова можно определить после того как был замечен пробел, если символ отличный от пробела- значит новое слово.

C++
1
2
3
4
5
6
7
8
9
char sentence[]="... ... ...";
int i = 0;
bool was_space = false;
while(true)
{
if(sentence[i]==' ') { was_space = true; ++i ; continue;}
if(was_space && (sentence[i] != ' ')) {was_space  = false;//тут началось новое слово}
++i;
}

что тут вообще происходит?
Как можно тогда записать данное выражение?
C++
1
2
3
if (word[0] == arr[1] || word[0] == arr[2] ||
word[0] == arr[3] || word[0] == arr[4] ||
word[0] == arr[5] || word[0] == arr[6])
Вот так чересчур громоздко.

Добавлено через 22 минуты
Если кому интересно, переделал так, вроде работает:

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
#include <iostream>
#include <Windows.h>
#include <string>
 
using namespace std;
 
#define rus setlocale(LC_ALL,"rus");SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
void main()
{
    rus;
    short vowels = 0;
    short consonants = 0;
    short other = 0;
    char word[30] = {0};;
    char arr[12] = 
    {'a','i','o','e','y','u','A','I','O','E','Y','U'};
    
    for (int i = 0; i < 30; i++)
    {
        while (word[0] != '#')
        {
            cout << "Введите слово (что бы закончить, введите #): ";
            cin >> word;
            switch (word[0])
            {
            case 'a': 
            case 'A': 
            case 'O':
            case 'o':
            case 'e':
            case 'E':
            case 'I':
            case 'i':
            case 'Y':
            case 'y':
            case 'u':
            case 'U': vowels++; break;
            default: 
                if (isalpha(word[0]))
                    consonants++;
                else 
                    other++;
            }
        }
    }
    cout << "\n\aГласных - " << vowels;
    cout << "\nСогласных - " << consonants;
    cout << "\nДругих - " << other-1 << endl;
    system("pause");
}
Спасибо за ответы.
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,065
Завершенные тесты: 1
02.09.2013, 18:45 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
Как можно тогда записать данное выражение?
Код C++
1
2
3
if (word[0] == arr[1] || word[0] == arr[2] ||
word[0] == arr[3] || word[0] == arr[4] ||
word[0] == arr[5] || word[0] == arr[6])

C++
1
2
3
4
5
6
7
8
9
10
bool result = false;
for(int a=1;a<=6(или сколько там всего);++a)
{
if(word[0] == arr[a]) { result = true;break;}
}
 
if(result == true) vovels.++;
else cons.. ++
 
ну и isapla приписать конечно
1
02.09.2013, 18:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2013, 18:45
Привет! Вот еще темы с ответами:

В заданной строке выбрать те слова,в которых первая буква этого слова встречается еще хоть один раз - C++
Ввести несколько строк,каждая из которых содержит некоторое количество слов.В заданной строке выбрать те слова,в которых первая буква этого...

Если введена буква, то - C++
char k; cin&gt;&gt;k; if(k=='a'||k=='b'||k=='c'||k=='d'...) { } Если введенный символ - буква, делать то то. Проблема в том, что...

Найти слова, у которых первая буква входит в слово ещё раз - C++
Ребята, помогите пожалуйста! Возникли проблемы с написанием программы на С++ Задание: В произвольном тексте (взятом из файла),...

Напечатать слова, в которых первая буква входит в него еще раз - C++
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами -...


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

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

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