Сравнение строк в операторе 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д