C中的Tokenizer程序

时间:2015-10-13 11:24:08

标签: c arrays tokenize

我刚开始学习如何用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循环上方。 感谢任何帮助,谢谢。

2 个答案:

答案 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,否则它将具有不确定的值。

由于{ }错误放置,您的函数tokenizemain内定义。在main之外定义,这通常是完成的。