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

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

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

Оператор switch, можно ли сделать код проще? - C++

13.09.2012, 16:16. Просмотров 359. Ответов 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
#include <iostream>
#include <string>
#include <iterator>
int main(){
    using std::cout;using std::cin;using std::endl;using std::string; using std::getline;   
    string len1,all;
    int aj=0,ej=0,ij=0,oj=0,uj=0;
    while(getline(cin,len1)){all+=len1;}
    for(string::iterator ix=all.begin();ix!=all.end();++ix){
        switch(*ix){
            case 'a': 
            case 'A': {++aj;break;}
            case 'e': 
            case 'E': {++ej;break;}
            case 'i': 
            case 'I': {++ij;break;}
            case 'o': 
            case 'O': {++oj;break;}
            case 'u': 
            case 'U': {++uj;break;}
            }
        }
        cout<<aj<<" "<<ej<<" "<<ij<<" "<<oj<<" "<<uj<<endl;
    return 0;
    }
В VB с оператором SelectCase можно что душе угодно творить.... А в С++ вроде жесткие рамки, вопрос: 1. В оператор case можно каким либо образом затолкать условие допустим ('A' or 'a') или нельзя?
2. И вроде я где-то читал, что в C++ в case можно только целочисленный значения, тогда даже если символ в итераторе *ix преобразуется в int с чем он будет сравниваться? Или в условиях выбора case символ тоже преобразуется в int?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2012, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Оператор switch, можно ли сделать код проще? (C++):

Оптимизировать код оператор switch - C++
Послкажите что нетак после cin&gt;&gt;v содержимое switch не работает void main() { float inches=2.54; float cm; int...

Программый код и блок-схема по Си++ Оператор выбора switch - C++
1. По последней цифре данного натурального числа определить последню цифру квадрата этого числа. 2. Если у данного натурального...

Как сделать меню используя оператор switch - C++
Как сделать оператором выбора switch, меню выбора процедуры. Например если есть 3 процедуры, чтобы можно было включить одну из них....

Как можно сделать данный кусок кода меньше и проще? - C++
Задние: Заменить все элементы с четными номерами на значение второго положительного элемента массива. void change() //замена элементов...

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

Можно ли сделать оператор + виртуальным? - C++
Привет всем! У меня есть примерно такая структура: class A { public: virtual ~A(); virtual void print() const = 0; }

3
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
13.09.2012, 16:42 #2
Можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch(tolower(*ix)){
    case 'a':
        ++aj;
        break;
    case 'e':
        ++ej;
        break;
    case 'i':
        ++ij;
        break;
    case 'o':
        ++oj;
        break;
    case 'u':
        ++uj;
        break;
}
1
AnreyKazakov
Заблокирован
13.09.2012, 16:48  [ТС] #3
Цитата Сообщение от Andsteadur Посмотреть сообщение
(tolower(*ix))
Хаха прикольно ты сделал, однако, больше интересует не конкретный пример а возможности switch
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.09.2012, 16:57 #4
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
1. В оператор case можно каким либо образом затолкать условие допустим ('A' or 'a') или нельзя?
Нет. Эрзац-or можно получить так, как у вас сделано. Некоторые компиляторы (вроде gcc) умеют разворачивать case X..Y: в case X: case X+1: <...> case Y:, но это исключительно синтаксический сахар этих компиляторов, а не стандартная фишка.

Цитата Сообщение от AnreyKazakov Посмотреть сообщение
2. И вроде я где-то читал, что в C++ в case можно только целочисленный значения, тогда даже если символ в итераторе *ix преобразуется в int с чем он будет сравниваться? Или в условиях выбора case символ тоже преобразуется в int?
Они все являются объектами типа char, а это тоже целочисленный тип (числовое значение: код символа).
И да, там могут быть только целые или enum-типы (которые фактически тоже целые), причём константы.
1
13.09.2012, 16:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2012, 16:57
Привет! Вот еще темы с ответами:

оператор switch - C++
КАк сделать чтобы при выборе неправильного ответа во втрой switch программа не в ходила int main(){ char v1; cout &lt;&lt;&quot;Pervui...

Оператор switch - C++
Дан номер телевизионного канала. Вывести на экран наиболее популярные программы этого канала

Оператор switch - C++
Возникла проблема. Не хочет высчитываться &quot;v&quot;. Что не так? #include &lt;iostream.h&gt; #include &lt;math.h&gt; main () { int k; double...

Cи++. Оператор switch. - C++
У меня такой вопрос. Есть задача: с 1 января 1990 года по некоторый день прошло n месяцев, определить название месяца текущего. Ну как...


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

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

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