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

Поиск в строке гласных и согласных - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
03.10.2010, 12:36     Поиск в строке гласных и согласных #1
Доброго времени суток!Столкнулся с такой проблемой-нужно посчитать в строке количество гласных и согласных,проблема заключается в синтаксисе,просто не знаю как записать,а так по идее в другом языке программирования это было бы так:сделал бы два множества,где описаны в одном все согласные,в другом гласные и просто до конца строки считал бы вхождения этих множеств в строку,на с++ так можно?если нет то помогите как,с учетом того что я работаю с классом string,если описываете массив символов заодно и подскажите как из строки в массив символов записать,заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
03.10.2010, 12:49     Поиск в строке гласных и согласных #2
Почитайте, тут подобное обсуждалось, может подойдёт)
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 13:50     Поиск в строке гласных и согласных #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
#include <iostream>
#include <set>
 
int main()
{
    std::set<char> glas;
        glas.insert('e');
        glas.insert('y');
        glas.insert('u');
        glas.insert('i');
        glas.insert('o');
        glas.insert('a');
 
    int cnt_glas = 0;
    int cnt_sogl = 0;
 
    std::string text("qwerty  ko");
 
    std::string::iterator st;
    std::set<char>::iterator it;
 
    for ( st = text.begin(); st != text.end(); ++st){
        bool ok = false;
        for( it = glas.begin();  it != glas.end(); ++it)
            if ( *st == *it ){
                ++cnt_glas;
                ok = true;
                break;
            }
 
            if (ok) continue;
 
            if ( isalpha(*st) ){
                ++cnt_sogl;
            }
    }
 
    std::cout << "Count glas= " << cnt_glas << std::endl;
    std::cout << "Count sogl= " << cnt_sogl;
 
    return 0;
}
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
03.10.2010, 14:10  [ТС]     Поиск в строке гласных и согласных #4
PointsEqual ,можно пояснения и на русском языке никак?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 14:13     Поиск в строке гласных и согласных #5
REALIST07, о каких пояснениях речь? Вам дали исходный код - не ленитесь с ним разобраться. Если есть вопросы по классам, методам, то http://www.cplusplus.com/ в помощь.
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
03.10.2010, 14:19  [ТС]     Поиск в строке гласных и согласных #6
CyBOSSeR ,да был я на том сайте,если бы понимал английский или хотя бы были норм переводчики не задавал бы вопросов,пишешь же все равно сложно пару строк приписать о том что за переменная или о принципе

Добавлено через 33 секунды
в книгах про этот класс ничего нет
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 14:35     Поиск в строке гласных и согласных #7
впринципе можно было сделать 2 множества - в одном гласные, в другом согласные,
или 2 массива типа string - в одном гласные, в другом согласные(тогда и без итераторов можно было обойтись)

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
#include <iostream>
#include <set>
 
int main()
{
    std::set<char> glas; //создаем множество гласных
        glas.insert('e'); //заносим в него гласные
        glas.insert('y');
        glas.insert('u');
        glas.insert('i');
        glas.insert('o');
        glas.insert('a');
 
    int cnt_glas = 0; //здесь хранится количество гласных
    int cnt_sogl = 0;
 
    std::string text("qwerty  ko"); //строка в которой надо подсчитать символы
    
    //итераторы
    std::string::iterator st;
    std::set<char>::iterator it;
 
    for ( st = text.begin(); st != text.end(); ++st){ //над каждым символом строки ..
        bool ok = false;
        for( it = glas.begin();  it != glas.end(); ++it)//.. проверяем не гласная ли это буква..
            if ( *st == *it ){//..если гласная то увеличиваем счетчик гласных
                ++cnt_glas;
                ok = true;
                break;
            }
 
            if (ok) continue; //если была гласная то переходим к след симвлу строки
 
            if ( isalpha(*st) ){// если это была не гласная то проверяем, что это символ - буква (а так как это не гласная то мы нащли согласную)
                ++cnt_sogl; //увеличить счетчик согласных
            }
    }
 
    std::cout << "Count glas= " << cnt_glas << std::endl;
    std::cout << "Count sogl= " << cnt_sogl;
 
    return 0;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 14:52     Поиск в строке гласных и согласных #8
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
#include <algorithm>
#include <iostream>
#include <string>
#include <cctype>
 
bool IsVowel(char ch) {
  const std::string vowels = "AEIOUY";
  return vowels.find_first_of(std::toupper(ch)) != std::string::npos;
}
 
bool IsConsonant(char ch) {
  const std::string consonants = "BCDFGHJKLMNPQRSTVWXZ";
  return consonants.find_first_of(std::toupper(ch)) != std::string::npos;
}
 
int main() {
  const std::string str = "This is the test string";
  
  std::cout << "Vowel count: "      <<
               std::count_if(str.begin(), str.end(), IsVowel)     << std::endl;
  std::cout << "Consonants count: " <<
               std::count_if(str.begin(), str.end(), IsConsonant) << std::endl;
               
  return 0;
}
Результат: http://liveworkspace.org/code/e3310a...ad5a1eb3583da2
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
03.10.2010, 14:53  [ТС]     Поиск в строке гласных и согласных #9
А с русскими буквами как быть?и там не только гласные там еще и согласные
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
722 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 14:56     Поиск в строке гласных и согласных #10
Цитата Сообщение от REALIST07 Посмотреть сообщение
с русскими буквами как быть?
так же как и с нерусскими
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
03.10.2010, 14:57     Поиск в строке гласных и согласных #11
REALIST07, в случае решения из поста #8, просто добавьте русские гласные и согласные в функциях IsVowel и IsConsonant.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2010, 19:10     Поиск в строке гласных и согласных
Еще ссылки по теме:

Поиск гласных и согласных в тексте C++
C++ Строки. Сравнить количество гласных и согласных
В строке найти слова, в которых гласных букв больше, чем согласных C++

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

Или воспользуйтесь поиском по форуму:
REALIST07
Автор FAQ
Автор FAQ
 Аватар для REALIST07
174 / 174 / 13
Регистрация: 11.06.2010
Сообщений: 932
03.10.2010, 19:10  [ТС]     Поиск в строке гласных и согласных #12
ну попробую,потом отпишусь

Добавлено через 26 минут
CyBOSSeR ,ваш вариант хорош и на ура работает с английскими буквами но не с русскимипочему так?вроде русский подключил

Добавлено через 24 секунды
я так и сделал как вы говорили

Добавлено через 3 часа 41 минуту
ну так что с русским делать?
Yandex
Объявления
03.10.2010, 19:10     Поиск в строке гласных и согласных
Ответ Создать тему
Опции темы

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