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

Switch/case, ищу альтернативу дереву if - C++

Восстановить пароль Регистрация
 
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
04.06.2013, 01:14     Switch/case, ищу альтернативу дереву if #1
есть вот такой блок ifов
C++
1
2
3
4
5
6
7
8
std::string outType="two";
 
if(outType=="one")
    printf("1");
else if(outType=="two")
    printf("2");
else if(outType=="three")
    printf("3");
помнится есть хорошая конструкция switch case, только вот беда, она не работает с string и const char* переменными
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
std::string outType="two";
switch(outType)
{
case "one":
    printf("1");
    break;
case "two":
    printf("2");
    break;
case "three":
    printf("3");
    break;
}
чем заменить string? или может есть идеи чем заменить if ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 01:14     Switch/case, ищу альтернативу дереву if
Посмотрите здесь:

C++ switch case
C++ Switch - case
C++ switch i case
switch case 1 ИЛИ 2 C++
case-switch C++
C++ Switch + case
C++ Switch (Case)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 01:22     Switch/case, ищу альтернативу дереву if #2
а enum подойдет?
и чем if не подходит? кода будет аналогично свитчу, а то и меньше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
enum Digit {one = 1, two, three, four, five,
            six, seven, eight, nine};
 
int main()
{
    Digit digit = seven;
    switch (digit) {
        case one: cout << '1'; break;
        case two: cout << '2'; break;
        case three: cout << '3'; break;
        case four: cout << '4'; break;
        case five: cout << '5'; break;
        case six: cout << '6'; break;
        case seven: cout << '7'; break;
        case eight: cout << '8'; break;
        case nine: cout << '9'; break;
    }
    return 0;
}
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
04.06.2013, 01:27     Switch/case, ищу альтернативу дереву if #3
Цитата Сообщение от GBIT Посмотреть сообщение
она не работает с string и const char*
std::map
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
04.06.2013, 01:31     Switch/case, ищу альтернативу дереву if #4
я бы даже сказал std::unordered_map. Вам нужен ассоциативный массив
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
04.06.2013, 01:39  [ТС]     Switch/case, ищу альтернативу дереву if #5
Цитата Сообщение от Olivеr Посмотреть сообщение
а enum подойдет?
у меня outType с клавиатуры вводится на самом деле)
если я правильно понимаю, то enum в этом случае мне никак не ввести

Добавлено через 7 минут
MrCold,
MrGluck,
вообще не знаю что это такое. По этому только выдирание чужих кусков. Загуглил, получил такое
http://dshevchenko.biz/content/c11-s...8%D0%B2-stdmap

чет у меня такое ощущение, что если у меня всего лишь дерево из 3х ifов то проще оставить его?
Тут же столько всего навешивать нужно..
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 01:45     Switch/case, ищу альтернативу дереву if #6
GBIT, напишите какая у вас задача и что вам нужно сделать

Добавлено через 53 секунды
Цитата Сообщение от GBIT Посмотреть сообщение
чет у меня такое ощущение, что если у меня всего лишь дерево из 3х ifов то проще оставить его?
если из трех, то вопрос даже зря поднимался
GBIT
 Аватар для GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
04.06.2013, 01:53  [ТС]     Switch/case, ищу альтернативу дереву if #7
Olivеr, таки да, из трех. Сори, просто не люблю городить if else
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
04.06.2013, 02:49     Switch/case, ищу альтернативу дереву if #8
GBIT, http://www.cplusplus.com/reference/u...unordered_map/
http://www.cplusplus.com/reference/map/map/

И забудьте про сишные функции наряду с объектами типа std::string. Только через потоки
-=ЮрА=-
Заблокирован
Автор FAQ
04.06.2013, 09:09     Switch/case, ищу альтернативу дереву if #9
Простой велосипед
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <iostream>
using namespace std;
 
int get_index(string number)
{
    int index = 0;
    string pNUM[] = 
    {"zero", "one","two","three","four","five", "six", "seven","eight","nine",""};
    for(index = 0; pNUM[index].length(); index++)
    {
        if(number == pNUM[index])
            break;
    }
    return index;
}
 
int main()
{
    cout<<get_index("two")<<endl;
    return 0;
}
http://codepad.org/gbkDS7bZ
dstat
36 / 38 / 1
Регистрация: 01.06.2011
Сообщений: 238
04.06.2013, 11:47     Switch/case, ищу альтернативу дереву if #10
зачем? если для оптимизации, то не пойдет, потому что case компилируется в последовательность if.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 17:37     Switch/case, ищу альтернативу дереву if
Еще ссылки по теме:

Switch-case C++
C++ switch и case
C++ Switch - Case
C++ Switch - case
Оператор switch case C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
5553 / 3032 / 339
Регистрация: 29.11.2010
Сообщений: 8,197
04.06.2013, 17:37     Switch/case, ищу альтернативу дереву if #11
советую почитать http://www.cyberforum.ru/blogs/18334/blog91.html
Yandex
Объявления
04.06.2013, 17:37     Switch/case, ищу альтернативу дереву if
Ответ Создать тему
Опции темы

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