Сравнение строк в операторе 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.