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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Chieff
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 17
22.08.2014, 12:29     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #1
Помогите с решением этой задачи:
Дана строка до точки, группа символов в которой между пробелами считается словом,
знаки препинания от слова пробелом не отделяются. Необходимо вычислить, сколько в строке слов, заканчивающихся гласной буквой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 12:29     Вычислить, сколько в строке слов, заканчивающихся гласной буквой
Посмотрите здесь:

Определить количество слов, заканчивающихся буквой а C++
Определить количество слов, заканчивающихся буквой "а" C++
посчитать количество слов, начинающихся согласной и заканчивающихся буквой а C++
В строке с найти количество слов заканчивающихся подстрокой с2 C++
C++ Количество слов, начинающихся и заканчивающихся одной буквой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 12:35     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #2
Проходишь посимвольно по строке, если встречаешь пробел, то проверяешь, является ли предыдущий символ гласной буквой, если да, то количество слов увеличиваешь, идешь дальше.

Если что, вот информация.
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 12:48     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #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
#include <iostream>
#include <string>
#include <cctype>
 
using namespace std;
 
bool ok(char  x)  {
    x = tolower(x);             
    switch(x) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u': return true;
        default: return false;          
    }
}
int main()
{
    string str;
    int ans = 0;
 
    getline(cin,str);
    
    int len = str.size();
    for (int i = 0; i < len; i++ )  
        if (str[i] == ' ' && ok(str[i-1])) ans++;
 
    cout << ans;
}
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 12:51     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #4
Да, только можно вместо этого:

C++
1
2
int len = str.size();
    for (int i = 0; i < len; i++ )
Вот так:

C++
1
    for (int i(0); i < str.length(); i++)
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 12:56     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #5
StasyanKO, каждый раз вызывать
C++
1
str.length()
накладно. В некоторых типах данных такие функции выполняется за длину объекта(не за константу). Поэтому лучше сохранить значение длины в новую переменную и использовать её.
Chieff
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 17
22.08.2014, 12:58  [ТС]     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #6
да так, спасибо огромное
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.08.2014, 13:08     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #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
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
Дана строка до точки, группа символов в которой между пробелами считается словом, 
знаки препинания от слова пробелом не отделяются. Необходимо вычислить, сколько
в строке слов, заканчивающихся гласной буквой.
*/
 
#include <string>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <functional>
 
std::string input_string("Дана строка до точки, группа символов в которой между пробелами считается словом, знаки препинания от слова пробелом не отделяются. Необходимо вычислить, сколько в строке слов, заканчивающихся гласной буквой.");
 
int main(void)
{
    setlocale(0, "rus");
 
    char vocalic_letters[] = { 'а', 'е', 'ё', 'и', 'о', 'у', 'э', 'ю', 'я' };
    char * begin_vocalic_letters = vocalic_letters;
    char * end_vocalic_letters = vocalic_letters + sizeof(vocalic_letters) / sizeof(vocalic_letters[0]);
 
    char punctuation_marks[] = { ',', ':', '-', ';', '.' };
    char * begin_punctuation_marks = punctuation_marks;
    char * end_punctuation_marks = punctuation_marks + sizeof(punctuation_marks) / sizeof(punctuation_marks[0]);
 
    std::string::iterator current =
        std::find_if(input_string.begin(), input_string.end(), std::bind2nd(std::not_equal_to<char>(), ' '));
    std::string::iterator end = input_string.end();
    int word_counter = 0;
    
    while (current != input_string.end())
    {
        std::string::iterator space = std::find(current, end, ' ');
        std::string::iterator last_word_letter = space - 1;
        if (std::find(begin_punctuation_marks, end_punctuation_marks, *last_word_letter) != end_punctuation_marks)
            --last_word_letter;
        if (std::find(begin_vocalic_letters, end_vocalic_letters, *last_word_letter) != end_vocalic_letters)
            ++word_counter;
        current = std::find_if(space, end, std::bind2nd(std::not_equal_to<char>(), ' '));
    }
 
    std::cout << "ВХОДНАЯ СТРОКА:" << '\n' << input_string << "\n\n"
        << "Число слов, оканчивающихся на гласную: " << word_counter << std::endl;
 
    system("pause");
    return 0;
}
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:15     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #8
John Prick, по-моему, вариант выше полегче . Может я ошибаяюсь?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.08.2014, 13:17     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #9
StasyanKO, ну знаки препинания тот вариант точно не учитывает, а это в задании указано. А, кстати, что такого сложного в моём варианте?
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:24     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #10
А, ну да, забыл про знаки
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.08.2014, 13:28     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #11
StasyanKO, а ещё посмотри, что будет, если в тот вариант передать строку, начинающуюся пробелом.
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:30     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #12
John Prick, да, знаю, попадём не туда, куда нужно, но это грубый вариант, тут важен смысл
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.08.2014, 13:31     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #13
StasyanKO, ну так мой тоже грубый. Наверняка, куча ошибок. Зато иллюстрирует применение STL для этой задачи.
gru74ik
Модератор
 Аватар для gru74ik
3121 / 1347 / 167
Регистрация: 20.02.2013
Сообщений: 3,852
Записей в блоге: 17
22.08.2014, 22:54     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #14
Вроде работает:
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
#include <iostream>
#include <string>
#include <windows.h>
#include <cctype>
 
bool isVowel(char);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    std::string str = "Дана строка до точки, группа символов "
                 "в которой между пробелами считается словом,"
                 "знаки препинания от слова пробелом не "
                 "отделяются; необходимо вычислить, сколько "
                 "в строке слов, заканчивающихся гласной буквой.";
 
    int strSize = str.size();
    char ch;
    int counter = 0;
 
    for (int i=1; i<strSize; ++i)
    {
        ch = str[i];
        if (isspace(ch))
        {
            ch = str[i-1];
            if (isVowel(ch))
                ++counter;
        }
    }
 
    std::cout << "В заданной строке " << counter
              << " слов, заканчивающихся на гласную.\n\n";
 
    return 0;
}
 
bool isVowel(char ch)
{
    if (ch=='а' || ch=='е' || ch=='ё' || ch=='и' || ch=='о' || ch=='у'  || ch=='э' || ch=='ю' || ch=='я')
        return true;
    else
        return false;
}
-NEURON-
22.08.2014, 22:59
  #15

Не по теме:

задача уровня средней школы, тут больше писанины по определению символов знаков препинания и гласных

gru74ik
Модератор
 Аватар для gru74ik
3121 / 1347 / 167
Регистрация: 20.02.2013
Сообщений: 3,852
Записей в блоге: 17
22.08.2014, 23:14     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #16
Считает, но почему-то на одно слово меньше, чем должна:

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
#include <iostream>
#include <string>
#include <windows.h>
#include <cctype>
 
bool isVowel(char);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    std::string str = "Дана строка до точки, группа символов "
                 "в которой между пробелами считается словом,"
                 "знаки препинания от слова пробелом не "
                 "отделяются; необходимо вычислить, сколько "
                 "в строке слов, заканчивающихся гласной буквой.";
 
    int strSize = str.size();
    char ch;
    int counter = 0;
 
    for (int i=0; i<strSize; ++i)
    {
        ch = str[i];
        if (isspace(ch))
        {
            ch = str[i-1];
 
            if (ispunct(ch))
            {
                ch = str[i-1];
                if(isVowel(ch))
                    ++counter;
            }
 
            if(isalpha(ch))
                if(isVowel(ch))
                    ++counter;
        }
    }
 
    std::cout << "В заданной строке " << counter
              << " слов, заканчивающихся на гласную.\n\n";
 
    return 0;
}
 
bool isVowel(char ch)
{
    if (ch=='а' || ch=='е' || ch=='ё' || ch=='и' || ch=='о' ||
        ch=='ы' || ch=='у' || ch=='э' || ch=='ю' || ch=='я')
        return true;
    else
        return false;
}
John Prick
22.08.2014, 23:26
  #17

Не по теме:

Цитата Сообщение от -NEURON- Посмотреть сообщение
задача уровня средней школы
-NEURON-, возьмёшься за взрослую задачу?

gru74ik
23.08.2014, 00:04
  #18

Не по теме:

Вставил проверки, там внутри, оказывается, вообще адЪ и израилЬ бред какой-то творится. Не могу понять, в чём загвоздка
Почему-то входит в ифы там, где, вроде бы, и вовсе не должна:

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
#include <iostream>
#include <string>
#include <windows.h>
#include <cctype>
 
bool isVowel(char);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    std::string str = "Дана строка до точки, группа символов "
                 "в которой между пробелами считается словом,"
                 "знаки препинания от слова пробелом не "
                 "отделяются; необходимо вычислить, сколько "
                 "в строке слов, заканчивающихся гласной буквой.";
 
    int strSize = str.size();
    char ch;
    int counter = 0;
 
    for (int i=0; i<strSize; ++i)
    {
        std::cout << i+1 << " iteration.\n";
        ch = str[i];
        std::cout << i+1 << " char is: " << ch << "\n";
        if (!(isspace(ch)))
        {
            ch = str[i-1];
            std::cout << "If char is space then it's " << i-1 << " char.\n";
            if (!(ispunct(ch)))
            {
                ch = str[i-1];
                std::cout << "If char is punct then it's " << i-1 << " char.\n";
                if(isVowel(ch))
                    ++counter;
            }
 
            if(!(isalpha(ch)))
                if(isVowel(ch))
                    ++counter;
        }
        //--------- Специальный блок для задержки ---------
        //================================================
        // С небольшой задержкой будут выведены 10 точек
        // одна за другой, как будто программа думает:
        std::cout << std::endl;
        for (int i=0; i<10; i++)
        {
        Sleep(600);
        std::cout << "*";
        }
        std::cout << std::endl;
        //------------------------------------------------
    }
 
    std::cout << "В заданной строке " << counter
              << " слов, заканчивающихся на гласную.\n\n";
 
    return 0;
}
 
bool isVowel(char ch)
{
    if (ch=='а' || ch=='е' || ch=='ё' || ch=='и' || ch=='о' ||
        ch=='ы' || ch=='у' || ch=='э' || ch=='ю' || ch=='я')
        return true;
    else
        return false;
}

GuGo1991
267 / 261 / 93
Регистрация: 02.08.2012
Сообщений: 609
23.08.2014, 00:30     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #19
Как вариант, может пригодится
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
#include <iostream>
#include <string>
 
int main()
{
    setlocale(0, "rus");
    int counter = 0;
    std::string str, vowels = "aeiouаеёиоуэюя";
    char ABC[] = {"abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщэюя"};
 
    std::cout << "Type some text: ";
    getline(std::cin, str);
    
    std::size_t found = str.find_first_not_of(ABC);
    while(found != std::string::npos)
    {
        for(std::string::iterator it = vowels.begin(); it != vowels.end(); ++it)
        {
            if(str[found - 1] == (*it))
            {
                counter++;
                break;
            }
        }
        found = str.find_first_not_of(ABC, found + 1);
    }
 
    if(vowels.find(str[str.size() - 1]) != std::string::npos) counter++;
 
    std::cout << counter << std::endl;
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2014, 02:07     Вычислить, сколько в строке слов, заканчивающихся гласной буквой
Еще ссылки по теме:

Подсчитать количество слов в тексте, начинающихся и заканчивающихся одной и той же буквой C++
Определить количество слов в каждой строке , начинающихся на ‘А’ и заканчивающихся на “ и” C++
C++ Вычислить количество слов в заданной строке, начинающихся и заканчивающихся 'W'

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
23.08.2014, 02:07     Вычислить, сколько в строке слов, заканчивающихся гласной буквой #20
Цитата Сообщение от gru74ik Посмотреть сообщение
ch = str[i-1];
Как Вы думаете, что произойдет, если первый символ и не буква и не пробел?

Цитата Сообщение от GuGo1991 Посмотреть сообщение
if(str[found - 1] == (*it))
А как Вы думаете, что будет, если первый символ не будет буквой?
Yandex
Объявления
23.08.2014, 02:07     Вычислить, сколько в строке слов, заканчивающихся гласной буквой
Ответ Создать тему
Опции темы

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