我刚开始学习如何用C语言编程,我被要求编写一个tokenizer程序,它将句子中的单词分成不同的标记,基本上是strtok()的作用。
#include <stdio.h>
#include <stdlib.h>
int tokenise(char str[], int start, char result[]);
int main(){
const int MAX_STRING = 256;
char buffer[MAX_STRING];
int start;
int count;
int i;
char result[MAX_STRING];
fgets(buffer, MAX_STRING, stdin);
printf("%s\n", buffer);
start = tokenise(buffer, 0, result);
while(start != -1){
printf("%s\n", result);
start = tokenise(buffer, start, result);
}
int tokenise(char str[], int start, char result[])
{
int j;
for( i = start; str[i] != ' '; i++)
{
result[j] = str[i];
j++;
}
j = 0;
return -1;
}
}
这是我到目前为止的代码,我不明白为什么我的函数不起作用。 有什么基本的我做错了或者我得到了一些大错的东西? 我也很困惑为什么我的讲师
start = tokenise(buffer, 0 , result);
在while循环上方。 感谢任何帮助,谢谢。
答案 0 :(得分:1)
-1
。'\n'
和其他此类空格字符。考虑使用ctype.h中的isspace()
函数。'\0'
的结尾,这意味着如果字符串中没有空格,您的程序将崩溃。答案 1 :(得分:1)
除了问题Lundin mentioned in his answer,
在函数int tokenise(char str[], int start, char result[])
int j;
j
未初始化,但随后也会循环递增。在使用之前将j
初始化为0
,否则它将具有不确定的值。
由于{ }
错误放置,您的函数tokenize
在main
内定义。在main
之外定义,这通常是完成的。