我一直在尝试用空白字符分割字符串。字符串的格式是a, b
,我需要将其拆分为a
和b
。我写的代码如下,但循环总是在打印最后一个字符之前终止。
void tokenize(char *str)
{
int i = 0, k = 0;
char *ch = malloc(1000);
printf("%sn", str);
while(i < strlen(str))
{
if(str[i] == ' ')
{
k = 0;
printf("%s", ch);
ch = malloc(1000);
i++;
}
else if(str[i] == ',')
i++;
else
{
ch[k++] = str[i++];
}
}
}
输出
q1, q2
q1
从上面的输出中可以明显看出,它在打印q2
之前终止,解决这个问题的解决方案值得赞赏。
您需要在循环后打印,因为打印仅在读取空格时完成:
#define STRLEN 1024
void tokenize(const char *str)
{
int i = 0, k = 0;
free(ch);
char *ch = malloc(STRLEN);
printf("%sn", str);
while(i < strlen(str))
{
if(str[i] == ' ')
{
k = 0;
printf("%sn", ch);
ch = malloc(STRLEN);
i++;
}
else if(str[i] == ',')
i++;
else
{
ch[k++] = str[i++];
}
}
printf("%sn", ch);
free(ch);
}