Сравнение строк в операторе Switch - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Прошу прощения за простой вопрос... Имется строковая переменная buf, в которой записана строка вида: "xx xxxx xxxxx xxx". Мне надо сравнивать с шаблонными значениями первые два символа. Хочется реализовать на операторе switch. Делаю так:
Листинг программы
  1. memset(id, 0, sizeof(id));
  2. strncpy(id, buf, sizeof(id) - 1);
  3. printf("%s\n", id); //Здесь вроде все правильно, 2 символа скопировались
  4. switch (id){
  5. case 'ls':
  6. printf("hello\n");
  7. break;
  8. default:
  9. printf("No nononono\n");
  10. }
Погуглил и почти везде либо сравнивают только один символ, либо делают обычный цикл for и сравнивают посимвольно...

Решение задачи: «Сравнение строк в операторе Switch»

textual
Листинг программы
  1. void process (void)
  2. {
  3.   char buff[1024];
  4.   ....
  5.   // В buff получена команда типа "tram pam padam"
  6.  
  7.   // Условно пишу код по выделению команды и аргументов
  8.   // Полагаем, что пробел присутсвует. Контроль ошибок сюда не включаю
  9.   char *cmd, *args, *p;
  10.   cmd = buff;
  11.   p = strchr (buff, ' ');
  12.   *p = 0;
  13.   args = p+1;
  14.  
  15.   // В этой точке cmd="tram", args="pam padam"
  16.   // И нам уже необязательно, чтобы все команды были двухбуквенные
  17.   if (! strcmp( cmd, "ls"))
  18.     parse_ls (cmd);
  19.   else if (! strcmp( cmd, "run"))
  20.     parse_run (cmd);
  21.   else if ...
  22. }

Объяснение кода листинга программы

  1. void process (void) - объявление функции process без параметров и возвращаемого значения.
  2. char buff[1024]; - объявление переменной типа char с именем buff и размером в 1024 байта.
  3. char *cmd, *args, *p; - объявление трех переменных типа char* с именами cmd, args и p.
  4. cmd = buff; - присваивание начального адреса массива buff переменной cmd.
  5. p = strchr (buff, ' '); - поиск первого пробела в строке buff с помощью функции strchr и присвоение результата переменной p.
  6. *p = 0; - замена первого пробела на нулевой символ (пустую строку) с помощью оператора *.
  7. args = p+1; - присвоение адреса следующего символа после пробела переменной args.
  8. if (! strcmp( cmd,ls)) - проверка условия с помощью функции strcmp и оператора !. Если строки cmd и ls не равны, то выполняется следующий блок кода.
  9. parse_ls (cmd); - вызов функции parse_ls с передачей в нее переменной cmd в качестве аргумента.
  10. else if (! strcmp( cmd,run)) - проверка условия с помощью функции strcmp и оператора !. Если строки cmd и run не равны, то выполняется следующий блок кода.
  11. parse_run (cmd); - вызов функции parse_run с передачей в нее переменной cmd в качестве аргумента.
  12. else if ... - продолжение условного оператора else if.
  13. ... - продолжение кода.
  14. } - закрытие блока кода.
  15. } - закрытие функции process.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы