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

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

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

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

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

textual
Листинг программы
void process (void)
{
  char buff[1024];
  ....
  // В buff получена команда типа "tram pam padam"
 
  // Условно пишу код по выделению команды и аргументов
  // Полагаем, что пробел присутсвует. Контроль ошибок сюда не включаю
  char *cmd, *args, *p;
  cmd = buff;
  p = strchr (buff, ' ');
  *p = 0;
  args = p+1;
 
  // В этой точке cmd="tram", args="pam padam"
  // И нам уже необязательно, чтобы все команды были двухбуквенные
  if (! strcmp( cmd, "ls"))
    parse_ls (cmd);
  else if (! strcmp( cmd, "run"))
    parse_run (cmd);
  else if ...
}

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

  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
Похожие ответы