我正在尝试将一个句子标记为仅由一个空格分隔的单词。 我需要从句子中获取单词,然后将它们写入订阅数组。 这是我的作品:
void writeToStrArrayOneByOne(char words[10][20], char *sentence){
char *tokenPtr;
int j = 0;
int a,i;
tokenPtr = strtok(sentence," ");
while(tokenPtr != NULL){
a = strlen(tokenPtr);
for(i=0;i<a;i++){
words[j][i] = tokenPtr[i];
}
tokenPtr = strtok(NULL," ");
j++;
}
为了从 main 调试,我只用这个调用函数:
char words[10][20];
char *sentence = "this is a token";
writeToStrArrayOneByOne(words,sentence);
但是它像 EOF 异常时一样卡住。 感谢任何帮助,谢谢。
最佳答案
strtok()
修改它传递的字符串。你给它一个不能修改的字符串文字。
尝试:
char sentence[] = "this is a token";
这将使 sentence
成为可修改的字符数组。
另请记住,您复制标记的循环不会在每个条目的末尾放置空终止符 - 我怀疑您可能需要这些。也许试试:
strcpy(words[j], tokenPtr);
您应该考虑的其他事项包括:
- 处理可能太长的 token
- 得到一个包含太多标记的字符串
- 如果 token 之间有一个以上的空格需要做什么 -
strtok()
不会处理如果这对你很重要(我提到这一点只是因为在你的问题中你特别提到标记“仅由一个空格分隔”)
关于c - 标记 c 中句子的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10199416/