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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Chieff
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 17
#1

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

22.08.2014, 12:29. Просмотров 1204. Ответов 29
Метки нет (Все метки)

Помогите с решением этой задачи:
Дана строка до точки, группа символов в которой между пробелами считается словом,
знаки препинания от слова пробелом не отделяются. Необходимо вычислить, сколько в строке слов, заканчивающихся гласной буквой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 12:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить, сколько в строке слов, заканчивающихся гласной буквой (C++):

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

Определить, сколько в наборе слов, заканчивающихся буквой а - C++
Дан набор слов, разделенных точкой с запятой ( ; ). Набор заканчивается двоеточием ( : ). Определить, сколько в нем слов, заканчивающихся...

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

Вычислить количество слов в заданной строке, начинающихся и заканчивающихся 'W' - C++
Надо написать прогу: Дана строк S, вывести количество слов начинающихся и заканчивающихся 'W'

Определить количество слов, заканчивающихся буквой а - C++
Пожалуйста, обратится нет кому за помощью. напишите прогу на эту задачу: Дан набор слов . разделенных ; набор заканчивается...

Количество слов, начинающихся и заканчивающихся одной буквой - C++
#include <conio.h> #include <string.h> #include <iostream.h> #pragma argsused int main() { char s; int i,k=0,n=0,a,j=0; ...

29
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 12:35 #2
Проходишь посимвольно по строке, если встречаешь пробел, то проверяешь, является ли предыдущий символ гласной буквой, если да, то количество слов увеличиваешь, идешь дальше.

Если что, вот информация.
0
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;
}
0
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++)
0
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 12:56 #5
StasyanKO, каждый раз вызывать
C++
1
str.length()
накладно. В некоторых типах данных такие функции выполняется за длину объекта(не за константу). Поэтому лучше сохранить значение длины в новую переменную и использовать её.
0
Chieff
0 / 0 / 0
Регистрация: 05.03.2014
Сообщений: 17
22.08.2014, 12:58  [ТС] #6
да так, спасибо огромное
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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;
}
1
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:15 #8
John Prick, по-моему, вариант выше полегче . Может я ошибаяюсь?
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
22.08.2014, 13:17 #9
StasyanKO, ну знаки препинания тот вариант точно не учитывает, а это в задании указано. А, кстати, что такого сложного в моём варианте?
1
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:24 #10
А, ну да, забыл про знаки
0
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
22.08.2014, 13:28 #11
StasyanKO, а ещё посмотри, что будет, если в тот вариант передать строку, начинающуюся пробелом.
1
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
22.08.2014, 13:30 #12
John Prick, да, знаю, попадём не туда, куда нужно, но это грубый вариант, тут важен смысл
1
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
22.08.2014, 13:31 #13
StasyanKO, ну так мой тоже грубый. Наверняка, куча ошибок. Зато иллюстрирует применение STL для этой задачи.
1
gru74ik
Модератор
Эксперт CЭксперт С++
4168 / 1816 / 198
Регистрация: 20.02.2013
Сообщений: 4,953
Записей в блоге: 21
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;
}
0
-NEURON-
22.08.2014, 22:59     Вычислить, сколько в строке слов, заканчивающихся гласной буквой
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 22:59
Привет! Вот еще темы с ответами:

Посчитать количество слов, начинающихся согласной и заканчивающихся буквой а - C++
Здравствуйте, помогите пожалуйста решить задачу, сам уже 2ой день пытаюсь сделать: &quot;посчитать количество слов, начинающихся согласной и...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.08.2014, 22:59
Ответ Создать тему
Опции темы

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