Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > как сделать чтобы switch работал для char??


Автор: corri 18.10.2009, 12:38
Задача:
вводим комманду в консоли (чаровский массив\строку  слово кароче)
далее по введённой комманде вызывается функция или если нету такой комманды,то кричим что ввели неправильную комманду

Хотел сделать так:

Код

char kommand;
gets (kommand);
switch (kommand)
{
          case exit:
                       exit(); //функция закрытия консоли
          default:
                     cout<<"error command"; 

}


но в switch нельзя загонять строку...
есть у кого какие варианты????

Автор: Acer 18.10.2009, 12:43
представь char в виде int

Автор: zim22 18.10.2009, 12:50
используй std::map<string, int>

Автор: Anikmar 18.10.2009, 17:59
Цитата(corri @  18.10.2009,  12:38 Найти цитируемый пост)
Хотел сделать так:

...
Цитата(corri @  18.10.2009,  12:38 Найти цитируемый пост)
но в switch нельзя загонять строку...
есть у кого какие варианты???? 


Вы заставляете бедного пользователя каждый раз строку вводить для команды?


Автор: ИванМ 18.10.2009, 18:44
Цитата(corri @  18.10.2009,  12:38 Найти цитируемый пост)
char kommand;

Вообще-то эта переменная - символ, а не строка.

Автор: Anikmar 18.10.2009, 19:44
Цитата(ИванМ @  18.10.2009,  18:44 Найти цитируемый пост)
Вообще-то эта переменная - символ, а не строка. 

Я это не заметил. 

Дело в том, что топикстартер настойчиво хочет в switch запихать строку. Я пытаюсь выяснить откуда он ее хочет взять. 
В общем то все знают о чем речь, но хочется, чтобы топикстартер сам пришел к нужному решению с нашими подсказками. Правда подсказка 
Цитата(zim22 @  18.10.2009,  12:50 Найти цитируемый пост)
используй std::map<string, int> 

На мой взгляд выглядит пока слишком сложной (я не слишком жестко выразился?)  smile 

Автор: Alexeis 19.10.2009, 11:11
Цитата(Anikmar @  18.10.2009,  18:44 Найти цитируемый пост)
На мой взгляд выглядит пока слишком сложной (я не слишком жестко выразился?)  smile 

  Это самый реальный вариант. Поиск в сортированном массиве на логарифмическое время. Только для команд можно сделать еще лучше
чем std::map<string, int> . 
Сразу 
Код

map<string, [тип функции обработчика]> Map;


А вызывать таким образом
Код

(*Map->find(Command->Name)->second)([парметры обработчика команды])


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)