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

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

Войти
Регистрация
Восстановить пароль
 
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

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

04.06.2013, 01:14. Просмотров 564. Ответов 10
Метки нет (Все метки)

есть вот такой блок 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
Посмотрите здесь:

Switch - Case - C++
Составить программу, определяющую результат гадания на ромашке («любит–не любит– плюнет–поцелует–к сердцу прижмёт–к чёрту пошлёт»), взяв...

Switch + case - C++
Суть задания: Задан шифр книги из библиотеки в виде шестизначного целого числа. Определить к какому подразделу ...

switch case - C++
как в блок-схеме изображается switch case?

switch i case - C++
v 4jom u menja o6ibka? i kak vivisti rezultat? # include <iostream> # include <conio.h> using namespace std; int main () ...

Switch - case - C++
Доброго времени суток. Сделал меню по такой схеме: switch(a) { case 1: { case 1: case 2: switch(aa) ...

Switch - case - C++
Обязательно с использованием классов Есть задача. Дан массив вещественных чисел. а) Ко всем отрицательным элементам прибавить элемент...

Switch-case - C++
Можно ли так писать? switch (simvol) { case (('(') or ('1') or ('2') or ('3') or ('4') or ('5') or ('6') or ('7') or ('8')...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
853 / 751 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
04.06.2013, 01:27     Switch/case, ищу альтернативу дереву if #3
Цитата Сообщение от GBIT Посмотреть сообщение
она не работает с string и const char*
std::map
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,075
04.06.2013, 01:31     Switch/case, ищу альтернативу дереву if #4
я бы даже сказал std::unordered_map. Вам нужен ассоциативный массив
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
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
04.06.2013, 01:45     Switch/case, ищу альтернативу дереву if #6
GBIT, напишите какая у вас задача и что вам нужно сделать

Добавлено через 53 секунды
Цитата Сообщение от GBIT Посмотреть сообщение
чет у меня такое ощущение, что если у меня всего лишь дерево из 3х ifов то проще оставить его?
если из трех, то вопрос даже зря поднимался
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
04.06.2013, 01:53  [ТС]     Switch/case, ищу альтернативу дереву if #7
Olivеr, таки да, из трех. Сори, просто не люблю городить if else
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,075
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++
У меня есть программа, в ней по сути 2 подпрограммы, как сделать что бы при включении программы было меню выбора какое задание выполнять ? ...

switch и case - C++
Пишет, что switch не содержит case, но судя по коду - это не так... как же заставить его видеть этот case? #include &lt;iostream&gt; ...

case-switch - C++
Вот то задание что с case-switch надо сделать помогите знаю что задание дурное

Case switch и функции - C++
Имеется задание : 1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. 2. Выполнить...

Switch case калькулятор - C++
добрый вечер всем,в калькуляторе нужно найти процент вот мой код,где ошибка? #include &lt;iostream&gt; using namespace std; int...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,075
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
Ответ Создать тему
Опции темы

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