#include <stdio.h>
#include <ctype.h>
char *seek_alnum(char *p) {
if (!p || !*p)
return NULL;
while (
(!(*p >= 'a') || !(*p <= 'z'))
&&
(!(*p >= 'A') || !(*p <= 'Z'))
&&
(!(*p >= '0') || !(*p <= '9'))
&&
(*p != '\0')
)
p++;
return p;
}
char *seek_delimiter(char *p) {
if (!p)
return NULL;
while ((*p != ' ') && (*p != '\0'))
p++;
return p;
}
#define MAXARG 10
void parse_shell_input(char *line) {
int i;
int argc = 0;
char *argv[MAXARG] = {0};
char *p = line;
while (p = seek_alnum(p)) {
argv[argc++] = p;
if (argc >= MAXARG)
break;
p = seek_delimiter(p);
if (*p)
*p++ = '\0';
}
for (i = 0; i < argc; i++)
printf("%s\n", argv[i]);
}
int main() {
char line[101];
fgets(line, sizeof(line), stdin);
parse_shell_input(line);
return 0;
}
Input
led set 3 on
Expected Output
led set 3 on