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

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

Восстановить пароль Регистрация
 
Алена_Коваленко
Заблокирован
02.12.2013, 02:09     Строки. Сравнить количество гласных и согласных #1
Задание: Дана строка. Определить, больше в строке гласных или согласных букв.
Что то со вводом строки не то. И не считает гласные. Помогите исправить пожалуйста.
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 02:09     Строки. Сравнить количество гласных и согласных
Посмотрите здесь:

Вывод количества гласных и согласных C++
C++ количество глассных и согласных и сравнить каких больше
C++ С клавиатуры вводится текстовая строка на русском языке. Найдите количество гласных и согласных букв.
C++ Поиск в строке гласных и согласных
C++ написать программу, которая подсчитывает количество гласных и согласных букв в заданной символьной строке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
02.12.2013, 02:46     Строки. Сравнить количество гласных и согласных #2
Проблемы связаны с тем, что компилятор плохо работает с кириллицей. Попробуйте перевести все в wide char (wstring, wcout, wcin ...)
Алена_Коваленко
Заблокирован
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;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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";
}
Алена_Коваленко
Заблокирован
02.12.2013, 08:39  [ТС]     Строки. Сравнить количество гласных и согласных #5
Добавлено через 29 минут
Мне понятен сам алгоритм, который вы написали, просто с синтаксисом у меня еще проблемы.
Хотела бы попросить комментарии, а вернее объяснения этой строки:
C++
1
  if (vowels.find(std::tolower(str[i])) != std::string::npos)
Остальное понятно.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
02.12.2013, 09:19     Строки. Сравнить количество гласных и согласных #6
Если в строке vowels найдется буква str[i], приведенная в нижний регистр, то...
http://www.cplusplus.com/reference/c...er/?kw=tolower
http://www.cplusplus.com/reference/string/string/find/
std::string::npos - Это специальная константа, которая указывает, что указанную комбинацию мы не нашли.
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 12:30     Строки. Сравнить количество гласных и согласных #7
Алена_Коваленко, если Вам нужно, могу написать свой вариант решения этой задачи)
Алена_Коваленко
Заблокирован
02.12.2013, 13:38  [ТС]     Строки. Сравнить количество гласных и согласных #8
Liden, буду признательна. А то боюсь тот вариант что предложил MrGluck, сложен для моего восприятия.
Liden
17 / 17 / 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/
Алена_Коваленко
Заблокирован
02.12.2013, 17:38  [ТС]     Строки. Сравнить количество гласных и согласных #10
Liden, все написано просто замечательно и доступно, компиляция без ошибок, но окно для выполнения не выводит.
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
02.12.2013, 17:58     Строки. Сравнить количество гласных и согласных #11
Алена_Коваленко, что не выводит? результат компиляции?
Алена_Коваленко
Заблокирован
03.12.2013, 16:11  [ТС]     Строки. Сравнить количество гласных и согласных #12
Цитата Сообщение от Liden Посмотреть сообщение
что не выводит? результат компиляции?
да.
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
03.12.2013, 16:44     Строки. Сравнить количество гласных и согласных #13
Алена_Коваленко, а у вас как среда разработки?
Алена_Коваленко
Заблокирован
03.12.2013, 17:41  [ТС]     Строки. Сравнить количество гласных и согласных #14
Liden, Dev - C++
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
03.12.2013, 17:47     Строки. Сравнить количество гласных и согласных #15
Алена_Коваленко, попробуйте добавить #include <conio.h>
Алена_Коваленко
Заблокирован
03.12.2013, 19:40  [ТС]     Строки. Сравнить количество гласных и согласных #16
Liden, у меня уже написано)))
Liden
17 / 17 / 2
Регистрация: 19.11.2013
Сообщений: 83
03.12.2013, 22:28     Строки. Сравнить количество гласных и согласных #17
Алена_Коваленко, затрудняюсь тогда ответить, что может быт не так)сам с этой средой никогда не работал)
Алена_Коваленко
Заблокирован
03.12.2013, 23:03  [ТС]     Строки. Сравнить количество гласных и согласных #18
Liden, я правильно поняла:
поиск по строке букв переведенных в нижний регистр, а дальше я понять не могу.
C++
1
if (vowels.find(std::tolower(str[i])) != std::string::npos)
Знаю что мне написали "std::string::npos - Это специальная константа, которая указывает, что указанную комбинацию мы не нашли.", но не могу связать эти два события в одно предложение.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 00:05     Строки. Сравнить количество гласных и согласных
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
04.12.2013, 00:05     Строки. Сравнить количество гласных и согласных #19
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
Liden, Dev - C++
в названии программы или проекта есть русские символы?

Добавлено через 4 минуты
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
не могу связать эти два события в одно предложение.
сначала очередная буква (str[i]) приводится к нижнему регистру с помощью функции tolower. Эта функция принимает символ и, если диапазон значений лежит в пределах A-Z, то возвращает соответствующий символ из диапазона a-z, иначе просто возвращает символ как есть.
Далее полученный символ передается методу find. Этот метод возвращает позицию (номер) первого соответствия с переданным символом/строкой. Если такового не нашлось, то он указывает на спец. константу - std::string::npos.
Мы передаем наш символ и, если он нашелся в строке (метод поиска не вернул эту константу), то выполняем тело условия, которое идет далее.
Yandex
Объявления
04.12.2013, 00:05     Строки. Сравнить количество гласных и согласных
Ответ Создать тему
Опции темы

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