我有一个长文本作为字符串,我想用C将它分成单个单词。
我尝试使用strtok()
解决方案,但这对我来说感觉就像一个肮脏的解决方案,所有的指针疯狂。
是否有直接的解决方案将字符串拆分为单词并将其存储在数组中?
我想到了一个for循环,迭代字符串并在出现空格或句号时启动一个新的“计数器”,但是当它存储它时我总是感到困惑......
希望你能帮助我
答案 0 :(得分:1)
也许你可以像这样处理字符串。这只是一个简单的演示。因此,在将代码投入实际使用之前,您可能需要优化代码。
#define skip_white_space(p) \
do { \
while (*p != '\0' && isspace(*p)) \
++p; \
} while (0)
#define skip_non_space(p) \
do { \
while (*p != '\0' && !isspace(*p)) \
++p; \
} while (0)
#define WORD_MAXLEN 64
char **strsplit(char *text, int *nword)
{
char *p, *q, **words;
words = NULL;
*nword = 0;
p = text;
while (*p != '\0') {
skip_white_space(p);
q = p;
skip_non_space(p);
if (p > q) {
++*nword;
words = (char **)realloc(words, *nword * sizeof(*words));
words[*nword - 1] = (char *)malloc(WORD_MAXLEN);
strncpy(words[*nword - 1], q, p - q);
words[*nword - 1][p - q] = '\0';
}
skip_white_space(p);
}
return words;
}