我正在创建自己的命令行解析器,我正在使用strok()
分隔子串和\t
(空格)的分隔符
但是,如果子字符串包含在\"
中,则不应拆分其内容,因为子字符串需要自由包含空格字符。
是否有任何已知功能或简单方法可以做到这一点?
答案 0 :(得分:0)
我很优雅地以优雅的方式去做,所以我只是以懒惰的方式做到了。 这是最丑陋的功能:
char* foo (char* str)
{
static char* p;
int subcontainer = 0;
int escBackslash = 0;
int i = 0;
if(p == NULL)
{
p = str;
if(*p == '\\')
escBackslash = 1;
}
char* offset = NULL;
for(offset = p; *p != '\0'; p++)
{
if(*p == '\\')
{
escBackslash = 1;
i = 1;
continue;
}
if(*p == '"' && escBackslash == 0)
{
if(subcontainer < 1)
{
subcontainer = 1;
offset++;
} else subcontainer = -1;
}
if(isspace(*p) && subcontainer < 1)
{
if(i) *(p - 3) = '"';
if(i) *(p - 2) = '\0';
*(p-(-subcontainer)) = '\0';
p++;
return offset + i;
}
if(*(p+1) == '\0')
{
if(i) *(p - 2) = '"';
if(i) *(p - 1) = '\0';
if(subcontainer == -1) *p = '\0';
p++;
return offset + i;
}
escBackslash = 0;
}
return NULL;
}
测试..
int main()
{
char* str = strdup("\"\\\"test\\\"\" + \"Command 2\" \"Command2\" function \"\\\"nice\\\"\"");
printf("[%s]\n", str);
char* str1 = foo(str);
while(str1 != NULL)
{
printf("str[%s]\n", str1);
str1 = foo(NULL);
}
free(str);
return 0;
}