Сравнение строк в операторе Switch - C (СИ)
Формулировка задачи:
Прошу прощения за простой вопрос...
Имется строковая переменная buf, в которой записана строка вида: "xx xxxx xxxxx xxx".
Мне надо сравнивать с шаблонными значениями первые два символа. Хочется реализовать на операторе switch. Делаю так:
Погуглил и почти везде либо сравнивают только один символ, либо делают обычный цикл for и сравнивают посимвольно...
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"); }
Решение задачи: «Сравнение строк в операторе 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 ... }
Объяснение кода листинга программы
void process (void)
- объявление функцииprocess
без параметров и возвращаемого значения.char buff[1024];
- объявление переменной типаchar
с именемbuff
и размером в 1024 байта.char *cmd, *args, *p;
- объявление трех переменных типаchar*
с именамиcmd
,args
иp
.cmd = buff;
- присваивание начального адреса массиваbuff
переменнойcmd
.p = strchr (buff, ' ');
- поиск первого пробела в строкеbuff
с помощью функцииstrchr
и присвоение результата переменнойp
.*p = 0;
- замена первого пробела на нулевой символ (пустую строку) с помощью оператора*
.args = p+1;
- присвоение адреса следующего символа после пробела переменнойargs
.if (! strcmp( cmd,
ls))
- проверка условия с помощью функцииstrcmp
и оператора!
. Если строкиcmd
иls
не равны, то выполняется следующий блок кода.parse_ls (cmd);
- вызов функцииparse_ls
с передачей в нее переменнойcmd
в качестве аргумента.else if (! strcmp( cmd,
run))
- проверка условия с помощью функцииstrcmp
и оператора!
. Если строкиcmd
иrun
не равны, то выполняется следующий блок кода.parse_run (cmd);
- вызов функцииparse_run
с передачей в нее переменнойcmd
в качестве аргумента.else if ...
- продолжение условного оператораelse if
.- ... - продолжение кода.
}
- закрытие блока кода.}
- закрытие функцииprocess
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д