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

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

Восстановить пароль Регистрация
 
AnreyKazakov
Заблокирован
13.09.2012, 16:16     Оператор switch, можно ли сделать код проще? #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
#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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2012, 16:16     Оператор switch, можно ли сделать код проще?
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andsteadur
152 / 136 / 3
Регистрация: 23.05.2009
Сообщений: 275
13.09.2012, 16:42     Оператор switch, можно ли сделать код проще? #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;
}
AnreyKazakov
Заблокирован
13.09.2012, 16:48  [ТС]     Оператор switch, можно ли сделать код проще? #3
Цитата Сообщение от Andsteadur Посмотреть сообщение
(tolower(*ix))
Хаха прикольно ты сделал, однако, больше интересует не конкретный пример а возможности switch
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1237 / 986 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.09.2012, 16:57     Оператор switch, можно ли сделать код проще? #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-типы (которые фактически тоже целые), причём константы.
Yandex
Объявления
13.09.2012, 16:57     Оператор switch, можно ли сделать код проще?
Ответ Создать тему
Опции темы

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