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

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

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

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

04.06.2013, 01:14. Просмотров 576. Ответов 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 ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 01:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Switch/case, ищу альтернативу дереву if (C++):

Оптимальная конструкция switch-case-while / while-switch-case - C++
Имеется конструкция типа: switch() { case 1: while() { ... }

Switch case внутри switch case - C++
Привет всем! Нужна помощь. Пишу калькулятор с консольным меню. Так вот, используется цикл while, внутри которого у меня switch...

switch-case, как писать в самом case - C++
Такс дело вот в чём,прога работает всё хорошо,вот только мне не нравится как записваю страны в кейсе,можно ли каким-нибудь образом писать в...

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

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

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

10
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
04.06.2013, 01:22 #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;
}
0
MrCold
855 / 753 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
04.06.2013, 01:27 #3
Цитата Сообщение от GBIT Посмотреть сообщение
она не работает с string и const char*
std::map
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
04.06.2013, 01:31 #4
я бы даже сказал std::unordered_map. Вам нужен ассоциативный массив
0
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
04.06.2013, 01:39  [ТС] #5
Цитата Сообщение от Olivеr Посмотреть сообщение
а enum подойдет?
у меня outType с клавиатуры вводится на самом деле)
если я правильно понимаю, то enum в этом случае мне никак не ввести

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

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

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

И забудьте про сишные функции наряду с объектами типа std::string. Только через потоки
0
-=ЮрА=-
Заблокирован
Автор FAQ
04.06.2013, 09:09 #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
2
dstat
36 / 38 / 1
Регистрация: 01.06.2011
Сообщений: 238
04.06.2013, 11:47 #10
зачем? если для оптимизации, то не пойдет, потому что case компилируется в последовательность if.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7278 / 4439 / 650
Регистрация: 29.11.2010
Сообщений: 12,017
04.06.2013, 17:37 #11
советую почитать http://www.cyberforum.ru/blogs/18334/blog91.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 17:37
Привет! Вот еще темы с ответами:

Switch (Case) - C++
У меня есть программа, в ней по сути 2 подпрограммы, как сделать что бы при включении программы было меню выбора какое задание выполнять ? ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
04.06.2013, 17:37
Ответ Создать тему
Опции темы

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