Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SWITCH строковых значений, STRING 
:(
    Опции темы
Enjoy
Дата 4.2.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.2.2006

Репутация: нет
Всего: нет



Здравствуйте!

Насколько я знаю выражение SWITCH CASE не работает с типом данных STRING.

Какие существуют альтернативные варианты обработки строк кроме блока if?

Пример:
Код

std::string StrToProcess1;
std::string StrToProcess2;
cin >> StrToProcess1 >> StrToProcess2;

if (StrToProcess1 == "QUIT")
{
   if (StrToProcess2 == "APPLICATION")
   {
      return 0;
   }
   if (StrToProcess2 == "GAME")
   {
      return 1;
   }
}

if (StrToProcess1 == "OPEN")
{
   if (StrToProcess2 == "DOCUMENT")
   {
      return 2;
   }
   if (StrToProcess2 == "FILE")
   {
      return 3;
   }
}



Как можно сократить количество строк подобного кода, и улучшить понимания, используя мощь С++?*

PM MAIL   Вверх
cardinal
Дата 4.2.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Сделай checksum и работай с числами или сравнивай побайтно...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Dreamer_0x01
Дата 4.2.2006, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Если я не ошибаюсь, то в операторе switch все поля "case" должны быть константами.

Поэтому единственный выход, наверное - определить функцию, преобразующее строку к какому-либо числу(чтобы можно было это число сравнивать с константой) Тогда можно будет вызывать эту функцию, чтобы получить преобразование в виде какой-то переменной (допустим, типа LONG), а потом уже эту переменную в операторе switch подставить в поля case.
Это конечно хорошо...Но вот сама функция, преобразующая стоку в число по какому-либо алгоритму - вещь достаточно трудно читаемая. А как я понял, требуется как раз хорошая "читаемость" кода.

то есть это будет что-то вида:

Код

class MyString::public CString
{
LONG ConvertToChislo();
}
************************************
//и далее в коде лепим подобного рода конструкции

#define STRING1 0 
#define STRING2 1
#define STRING3 2
/*вот тут кроется главная гадость - эти константы нужно будет посчитать на момент первой отладки...*/

MyString mstr;
//что-то делаем...
LONG tempStr=MyString.ConvertToChislo();
switch(tempStr)
{
case STRING0:break;
case STRING1:break;
case STRING2:break;
}




На мой взгляд, твоя конструкция с if выглядит не так уж и плохо. Лучшее - враг хорошего ;)


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
answerU
Дата 5.2.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Objavit i inicializirovat massiv s elementami <string, string, int> t.e <StrProcess1, StrProcess2, returnValue> , zdelat iteraciu po masivu, a vnutri-

Код

if( StrProcess1== mas[i].str1 && StrProcess2== mas[i].str2) 
{
    return mas[i].val;
}


Это сообщение отредактировал(а) answerU - 5.2.2006, 19:35
PM MAIL   Вверх
cardinal
Дата 5.2.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



answerU, используйте транслит!


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.