首页 > 解决方案 > 如何在不使用 strtok() 的情况下标记字符串

问题描述

我正在尝试在不使用strtok().

当我运行字符串字符时,它将在每一行中打印。

例如,当我运行时:

printfTokens("Hello from other side!");

输出应该是:

Hello
from 
other
side!

因为我刚刚学习 C,所以我在如何实现这个程序上被困了好几个小时。到目前为止,我只知道基础知识并玩弄 not(仍然没有学习任何callocmalloc 等)。

到目前为止,我有这段代码,但输出没有打印任何内容。

#include <stdio.h>
#include <string.h>

#define MAX_WORD 100

void printfTokens(char *inputString) {

    int i;

    /*int inputStringLength;

    for(i = 0; inputString[i] != '/0'; i++) {
        inputStringLength++;
    }*/

    while(inputString[i] != '\0') {
        char testing[MAX_WORD];
        while(inputString[i] != ' ') {
            testing[inputString[i]]++;
            i++;
        }
        printf("%s", testing);
        i++;
    }
}

int main() {

    printfTokens("TESTING ONE! TWO! THREE!");

    return 0;
}

标签: cstringtokenize

解决方案


  1. 您不初始化变量i

  2. while(inputString[i] != '\0')可以写while(inputString[i])

  3. testing[inputString[i]]++从 中计算给定字符的出现次数是有意义的inputString,但打印它没有意义。您可能想要执行以下操作:

    while(1) 
    {
     char testing[MAX_WORD], *t=testing;
     while(inputString[i]&&(inputString[i]!=' '))
         *t++=inputString[i++];
     if (t>testing) printf("%s", testing);
     if (!inputString[i]) break;
     i++;
    }
    
  4. 最好用 nameMAX_WORD_LENGTH而不是MAX_WORD.

这些是您的代码中的一些问题。


推荐阅读