Использование String внутри switch

Vladislav1603
Offline
Зарегистрирован: 19.12.2015

Помогите имеется некая функция которая возвращает тип данных String, мне нужно проверить это значение со списком уже известных значений и в зависимости от этого выбрать дальнейшую функцию, однако switch не позволяет использовать переменные типа String. Подскажите как выйти из этой ситуации?

void remote_control(char* msg){
  String command = cutter(msg);
  switch (command){
    case "help" :
    //код
    break;
  }
}
Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

каскад из if()

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Gippopotam пишет:

каскад из if()

У меня такое ощущение, что нас троллят.

Vladislav1603
Offline
Зарегистрирован: 19.12.2015

Каскад из if очень громоздко, я думал что нибудь более красивое подскажите

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Vladislav1603 пишет:

Каскад из if очень громоздко, я думал что нибудь более красивое подскажите

в рамках языка С++?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

ЕвгенийП пишет:

Gippopotam пишет:

каскад из if()

У меня такое ощущение, что нас троллят.

согласен

vk007
Offline
Зарегистрирован: 16.06.2015

Vladislav1603 пишет:

однако switch не позволяет использовать переменные типа String

Но зато работает с char. Можно ведь сравнивать не всю строку, а только один символ. Определиться, в какой позиции строки символы наиболее уникальны и по ним вести сравнение. Даже если в выбранной позиции в нескольких строках и попадется одинаковая буква, то для такого символа сделать дополнительный фильтр не будет проблемой.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

vk007 пишет:

Vladislav1603 пишет:

однако switch не позволяет использовать переменные типа String

Но зато работает с char. Можно ведь сравнивать не всю строку, а только один символ. Определиться, в какой позиции строки символы наиболее уникальны и по ним вести сравнение. Даже если в выбранной позиции в нескольких строках и попадется одинаковая буква, то для такого символа сделать дополнительный фильтр не будет проблемой.

Это вы шутите так?

vk007
Offline
Зарегистрирован: 16.06.2015

Gippopotam пишет:

Это вы шутите так?

Возможно, что заблуждаюсь. Но в чем прикол?

arduinec
Offline
Зарегистрирован: 01.09.2015

Vladislav1603 пишет:

Помогите имеется некая функция которая возвращает тип данных String, мне нужно проверить это значение со списком уже известных значений и в зависимости от этого выбрать дальнейшую функцию, однако switch не позволяет использовать переменные типа String. Подскажите как выйти из этой ситуации?

Если строки в возвращаемой фунции постоянны, то проще переделать её и пусть она возвращает номера строк, которые switch и будет обрабатывать.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

А не много ли телодвижений, только для того, чтобы вместо IF использовать SWITCH?

arduinec
Offline
Зарегистрирован: 01.09.2015

И if и switch удобнее (и быстрее) сравнивать цифры чем строки.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

arduinec пишет:

И if и switch удобнее (и быстрее) сравнивать цифры чем строки.

https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9...

arduinec
Offline
Зарегистрирован: 01.09.2015

Gippopotam пишет:

arduinec пишет:

И if и switch удобнее (и быстрее) сравнивать цифры чем строки.

https://ru.wikipedia.org/wiki/%D0%91%D1%80%D0%B8%D1%82%D0%B2%D0%B0_%D0%9...

Цитата из указанной ссылки:
Переформулированный на языке теории информации, принцип бритвы Оккама гласит, что самым точным сообщением является сообщение минимальной длины.

Даже принцип бритвы Оккама говорит о том, что лучше сравнивать номера строк чем сами строки.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Принцип гласит: "Не плодите сущности без необходимости".

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Можно предвычислить CRC для каждой строки и записать их в операторы switch. И перед вызовом switch считать CRC для целевой строки.

vk007
Offline
Зарегистрирован: 16.06.2015

NeiroN пишет:

Можно предвычислить CRC для каждой строки и записать их в операторы switch. И перед вызовом switch считать CRC для целевой строки.

А можно для каждой строки назначить еще одну строку, соединить их, зашифровать и сравнивать ) ...

"Делать нам больше нечего, только вот разных собак из реки вытаскивать" (с)

arduinec
Offline
Зарегистрирован: 01.09.2015

Gippopotam пишет:

Принцип гласит: "Не плодите сущности без необходимости".

Данное сообщение как раз пример сущности без необходимости.

Что же касается моего предложения, то кучка программ использует вывод текстовых сообщений (меню, настройки и прочее) по номерам строк - так легче использовать в программе разные языки (в том числе и русский).

Datak
Offline
Зарегистрирован: 09.10.2014

Vladislav1603 пишет:

однако switch не позволяет использовать переменные типа String

Не позволяет - это значит выдаётся ошибка?

Почему бы не написать, какая конкретно? А то, например, у меня не всегда ардуиносреда под рукой.