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

книга прата с. глава 6 задание 7 - C++

Войти
Регистрация
Восстановить пароль
 
spezialist
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 22
16.11.2013, 01:18     книга прата с. глава 6 задание 7 #1
Напишите программу, котрая читает слова по одному за раз, пока небудет введена отдельная буква q. После этого программа должна сообщить количество слов, начинающихся с гласных, количество слов начинающихся с согласных, а также количество слов не попадающих ни в одну из этих категорий. Одним из возможных подходов может быть применение isalpha() для разлечения слов, начинающихся с букв, и остальных с последующим применнием if или switch для идентификации тех слов, прошедших проверку isalpha() , которые начинаются с гласных. пример запуска может выглядеть так:
Enter words (q to quit):
The 12 awesome oxen ambled
quietly across 15 meters of lawn. q

5 words beginning with vowels
4 words beginning with consonants
2 others
-----------------------------------------------------------------------------------------------------------------------
проблема состоит в том что программа будет завершатся не как должна. cin.getline() завершит чтение после первого попавшегося символа q . те остановится на чтении слова "quietly".


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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <iostream>
#include <cctype>
int main ()
{
    using namespace std;
    int a = 0;
    int b = 0;
    int glasnije_num = 0;
    int soglasnije_num = 0;
    int others = 0;
    char glasnije[10] = {'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
    char soglasnije[42] ={'B', 'C', 'D', 'F', 'G', 'H', 'j', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z',
        'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'X', 'Y', 'Z',}; 
    char ch[100] = {0};
 
    cout << "Enter words (q, to quit): ";
    cin.getline(ch, 100, 'q');
 
    while (a != 99)
    {
        //1. Proverka na soglasnije posle 'Enter'
        if (ch[a] == '\n')
        {
            for (; b != 42; ++b)
                {
                if (ch[a+1] == soglasnije[b])
                    ++soglasnije_num;
                }
        }
 
        //1. Proverka na zivri posle 'Enter'
        if (ch[a] == '\n')
        {
            if (isdigit(ch[a+1]))
                ++others;
        }
 
        //2.Proverka na zivri posle probela
 
        if (ch[a] == '\040')
        {
            if (isdigit(ch[a+1]))
                ++others;
        }
 
 
        b = 0;
 
        //2. Proverka na glasnije posle 'Enter'
        if (ch[a] == '\n')
        {
            for (; b != 10; ++b)
                {
                if (ch[a+1] == glasnije[b])
                    ++glasnije_num;
                }
        }
    
 
        b = 0;
 
        //1. Proverka na glasnije posle Probela
        if (ch[a] == '\040')
        {
            for (; b != 10; ++b) 
            {
                if (ch[a] == '\040')
                {
                    if (ch[a+1] == glasnije[b]) 
                        ++glasnije_num;
                }
            }
        }
        b = 0;
 
 
        //2. Proverka na soglasnije posle Probela
        if (ch[a] == '\040')
        {
            for (; b != 42; ++b) 
            {
                if (ch[a] == '\040')
                {
                    if (ch[a+1] == soglasnije[b]) 
                        ++soglasnije_num;
                }
            }
        }
 
        b = 0;
        ++a;
 
 
 
 
 
    }
 
    b = 0;
    a = 0;
    //1. Nachalo Massiva, Proverka na zivri
    if (isdigit(ch[0]))
        ++others;
 
    //1. Nachalo Massiva, proverka na soglasnije
    for (; b != 42; ++b)
        {
            if (ch[0] == soglasnije[b])
                ++soglasnije_num;
        }
 
    b = 0;
    // 2. Nachalo Massiva, proverka na glasnije
    for (; b != 10; ++b)
        {
            if (ch[0] == glasnije[b])
                ++glasnije_num;
        }
    
    //cout << ch << endl;
    cout << "Glasnije: " << glasnije_num << endl;
    cout << "Soglasnije: " << soglasnije_num << endl;
    cout << "Others: " << others << endl;
    cin.get();
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2013, 01:18     книга прата с. глава 6 задание 7
Посмотрите здесь:

Циклы и выражения отношений (Прата 5 глава 3 зад) C++
С.Прата глава 5(циклы) зад.4 C++
C++ Прата С. 6.6
C++ C++ - Прата задача 6.9
Функция преобразования температуры из градусов Цельсия в градусы Фаренгейта (задание №5 из С.Прата, глава 2) C++
Программа, которая выдает запрос на ввод значений часов и минут (задание №7 из С.Прата, глава 2) C++
C++ Прата, задача 2, глава 6
C++ Что я сделал не так? Прата С. Глава 2. Упражнение 3
C++ Аварийное завершение программы (Прата, глава 12, string1)
Упражнение по программированию (Стивен Прата, глава 2, упражнение 3) C++
задание из книги стивен прата 6 издание глючит. в чем может быть ошибка C++
C++ книга стивен прата как справиться с задачей стр 342 листинг 7.12

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.11.2013, 05:25     книга прата с. глава 6 задание 7 #2
Цитата Сообщение от spezialist Посмотреть сообщение
проблема состоит в том что программа будет завершатся не как должна. cin.getline() завершит чтение после первого попавшегося символа q . те остановится на чтении слова "quietly".
Зачем здесь, вообще, getline()?
Сказано же:
Цитата Сообщение от spezialist Посмотреть сообщение
котрая читает слова по одному за раз
А вы строчное чтение используете. Читайте, в цикле, слова (cin >>) и анализируйте, пока не попадётся слово из одной q.

Добавлено через 30 минут
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
#include <iostream>
#include <cctype>
 
int main ()
{
    using namespace std;
    
    int glasnije_num = 0;
    int soglasnije_num = 0;
    int others = 0;
    char glasnije[10] = {'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u'};
    char soglasnije[42] ={'B', 'C', 'D', 'F', 'G', 'H', 'j', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z',
        'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'X', 'Y', 'Z',}; 
    char ch[100];
 
    cout << "Enter words (q, to quit): ";
    
    int flag;
    while (cin >> ch)
    {
        if (!strcmp(ch, "q")) break;
        
        flag = 0;
        if (isalpha(ch[0]))
        {
            for (int b = 0; b != 42; ++b)
            {
                if (ch[0] == soglasnije[b])
                {
                    ++soglasnije_num;
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
            
            for (int b = 0; b != 10; ++b)
            {
                if (ch[0] == glasnije[b])
                {
                    ++glasnije_num;
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) continue;
        }
        else ++others;
    }
    
    cout << "Glasnije: " << glasnije_num << endl;
    cout << "Soglasnije: " << soglasnije_num << endl;
    cout << "Others: " << others << endl;
    
    cin.get();
    cin.get();
    return 0;
}
Yandex
Объявления
16.11.2013, 05:25     книга прата с. глава 6 задание 7
Ответ Создать тему
Опции темы

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