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

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

Войти
Регистрация
Восстановить пароль
 
 
Алена_Коваленко
Заблокирован
#1

Строки. Сравнить количество гласных и согласных - C++

02.12.2013, 02:09. Просмотров 1000. Ответов 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
  #include <iostream>
  #include <conio.h>
  #include <cstring>
 
  using std::cout;
  using std::cin;
  using std::endl;
 
int main()
{       setlocale (LC_ALL , "Russian");
        int gl=0, sg=0, i, j;
        char gls[]="Г*óîûèýÿþ¸å";
        char sog[]="áâãäæçéêëìГ*ïðñòôõö÷øù";
        char str[100];
 
        cout << "Ââåäèòå ñòðîêó:" << endl;
        cin.getline(str,100) >> str;
 
        for(i=0; i<strlen(str); i++)
                for(j=0; j<strlen(gls); j++)
                        if(str[i]==gls[j])
                                gl+=1;
 
        for(i=0; i<strlen(str); i++)
                for(j=0; j<strlen(sog); j++)
                        if(str[i]==sog[j])
                                sg++;
        cout<<  "ГѓГ«Г*Г±Г*ûõ : "<<gl<< endl<<"ÑîãëГ*Г±Г*ûõ : "<<sg<<endl;
       if (gl>sg)
           {cout << "ГѓГ«Г*Г±Г*ûõ áîëüøå, Г·ГҐГ¬ ñîãëГ*Г±Г*ûõ" << endl;}
       else
           cout << "ÑîãëГ*Г±Г*ûõ áîëüøå Г·ГҐГ¬ ГЈГ«Г*Г±Г*ûõ";
        _getch();
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 02:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки. Сравнить количество гласных и согласных (C++):

Сравнить количество гласных и согласных - C++
/*В последовательности символов вывести на печать TRUE, если количество гласных букв больше, чем согласных и FALSE – иначе.*/ ...

Найти количество гласных и согласных букв - C++
Помогите плиз!Надо найти кол-во гласных и согласных букв.Вот что-то понять не могу где ошибка.Ни фига не считает. #include &lt;stdio.h&gt; ...

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

Посчитать количество гласных, согласных, слов в предложении - C++
Здравствуйте. Помогите пожалуйста, как посчитать количество гласных, согласных, слов в предложении: &quot;Вася Пупкин, с Новым Годом!&quot;. Это...

Подсчитать в строке количество гласных, согласных, знаков препинания, пробелов - C++
Подсчитать в строке количество гласных, согласных, знаков препинания, пробелов, общее количество символов, из них -цифровых символов. ...

количество глассных и согласных и сравнить каких больше - C++
Добрый день, есть програма на паскале, которая считает количество глассных и согласных и сравнивает каких больше uses crt; const ...

18
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,605
02.12.2013, 02:46 #2
Проблемы связаны с тем, что компилятор плохо работает с кириллицей. Попробуйте перевести все в wide char (wstring, wcout, wcin ...)
0
Алена_Коваленко
Заблокирован
02.12.2013, 05:35  [ТС] #3
MrGluck, если изменять так как вы сказали, то компилятор выдает ошибку.
Попоробавала сделать чтоб читал строку на английском, и так же с вводом проблемы и не считает .
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
  #include <iostream>
  #include <conio.h>
  #include <cstring>
 
  using std::cout;
  using std::cin;
  using std::endl;
  using std::getline;
 
int main()
{       setlocale (LC_ALL , "Russian");
        int gl=0, sg=0, i, j;
        char gls[]="aeiou";
        char sog[]="bcdfghjklmnpqrstvwxyz";
        char str[100];
 
        cout << "Введите строку на английском языке:" << endl;
        cin.getline(str,100) >> str;
 
        for(i=0; i<strlen(str); i++)
                for(j=0; j<strlen(gls); j++)
                        if(str[i]==gls[j])
                                gl+=1;
 
        for(i=0; i<strlen(str); i++)
                for(j=0; j<strlen(sog); j++)
                        if(str[i]==sog[j])
                                sg++;
        cout<<  "Гласных : "<<gl<< endl<<"Согласных : "<<sg<<endl;
       if (gl>sg)
           {cout << "Гласных больше, чем согласных" << endl;}
       else
           cout << "Согласных больше чем гласных";
        _getch();
        return 0;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,605
02.12.2013, 06:50 #4
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
MrGluck, если изменять так как вы сказали, то компилятор выдает ошибку.
Значит не до конца верно подставили. Код с ошибкой выкладывать надо, а не заставлять гадать в чем вы ошиблись.
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
#include <cctype>
#include <cstddef>
#include <clocale>
#include <iostream>
#include <string>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::string vowels = "aeiou";
    std::string consonants = "bcdfghjklmnpqrstvwxyz";
    std::string str;
    size_t counter1 = 0, counter2 = 0;
 
    std::cout << "Введите строку:\n";
    std::getline(std::cin, str);
 
    for (size_t i=0; i < str.size(); i++)
    {
        if (vowels.find(std::tolower(str[i])) != std::string::npos)
            counter1++;
        else if (consonants.find(std::tolower(str[i])) != std::string::npos)
            counter2++;
    }
 
    std::cout << "Гласных: " << counter1 << "\nСогласных : " << counter2 << std::endl;
    if (counter1 == counter2)
        std::cout << "Гласных и согласных поровну\n";
    else
        std::cout << (counter1 < counter2 ? "Согласных" : "Гласных") << " больше\n";
}
0
Алена_Коваленко
Заблокирован
02.12.2013, 08:39  [ТС] #5
Добавлено через 29 минут
Мне понятен сам алгоритм, который вы написали, просто с синтаксисом у меня еще проблемы.
Хотела бы попросить комментарии, а вернее объяснения этой строки:
C++
1
  if (vowels.find(std::tolower(str[i])) != std::string::npos)
Остальное понятно.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7492 / 4607 / 693
Регистрация: 29.11.2010
Сообщений: 12,605
02.12.2013, 09:19 #6
Если в строке vowels найдется буква str[i], приведенная в нижний регистр, то...
http://www.cplusplus.com/reference/cctype/tolower/?kw=tolower
http://www.cplusplus.com/reference/string/string/find/
std::string::npos - Это специальная константа, которая указывает, что указанную комбинацию мы не нашли.
1
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 12:30 #7
Алена_Коваленко, если Вам нужно, могу написать свой вариант решения этой задачи)
0
Алена_Коваленко
Заблокирован
02.12.2013, 13:38  [ТС] #8
Liden, буду признательна. А то боюсь тот вариант что предложил MrGluck, сложен для моего восприятия.
0
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 16:36 #9
Алена_Коваленко, если что-то непонятно - спрашивай.
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
  setlocale(LC_CTYPE, "rus");
  int i=0, j=0;
  char key[] = "aeiou";
  char sog[]="bcdfghjklmnpqrstvwxyz";
  char str[100];
        cout<<"Введите строку на английском языке: ";
        gets(str);
 
   for (int k=0; k<=strlen(str); k++)
    str[k]=tolower(str[k]);
 
  char *pch = strpbrk (str, key);
  char *qch = strpbrk (str, sog);                          // первый поиск
 
  while (qch!= NULL)                                       // пока есть согласные буквы в строке
  {                                                         
    qch = strpbrk (qch+1,sog);                             // поиск cогласных букв
    i++;                                                    
  }
 
  while (pch!= NULL)                                       // пока есть гласные буквы в строке
  {                                                         
    pch = strpbrk (pch+1,key);                             // поиск гласных букв
    j++;                                                    
  }
   if (i == j)
        cout << "Гласных и согласных поровну\n";
    else
        cout << (j < i ? "Согласных" : "Гласных") << " больше\n"; 
 
    system("PAUSE");
    return 0;
}
Добавлено через 6 минут

Добавлено через 2 минуты
Алена_Коваленко, информация о функции strpbrk: http://cppstudio.com/spravochnik/sta...kciya-strpbrk/
2
Алена_Коваленко
Заблокирован
02.12.2013, 17:38  [ТС] #10
Liden, все написано просто замечательно и доступно, компиляция без ошибок, но окно для выполнения не выводит.
0
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 17:58 #11
Алена_Коваленко, что не выводит? результат компиляции?
0
Алена_Коваленко
Заблокирован
03.12.2013, 16:11  [ТС] #12
Цитата Сообщение от Liden Посмотреть сообщение
что не выводит? результат компиляции?
да.
0
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
03.12.2013, 16:44 #13
Алена_Коваленко, а у вас как среда разработки?
1
Алена_Коваленко
Заблокирован
03.12.2013, 17:41  [ТС] #14
Liden, Dev - C++
0
Liden
19 / 19 / 2
Регистрация: 19.11.2013
Сообщений: 83
03.12.2013, 17:47 #15
Алена_Коваленко, попробуйте добавить #include <conio.h>
0
03.12.2013, 17:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 17:47
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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