如何将字符串拆分为单词?

How to split a string into words?

我正在尝试将字符串拆分为单词。任何人都可以帮助我如何在不使用 strtokmain 以外的其他功能的情况下实现它吗?

void main()
{
    int i;
    int myargc = 1;
    char *myargv[256];
    char buff[100];
    int len = 0;
    char string[256];
    int j = 0;

    printf("Enter text: ");
    gets(buff);

    for(i = 0; buff[i] != '[=10=]'; i++){
        len++;
    }

    for(i = 0; i < len; i++)
    {
        if(buff[i]!=' ' && buff[i+1]==' ')
        {
            myargc++;
        }
    }
    printf("myargc %d\n",myargc);

    **for(i = 0; i < len; i++){
        if(buff[i] != ' '){
            string[j++] = buff[i];
        }
        if(buff[i] != ' ' && buff[i] == ' '){
            string[j++] = '[=10=]';
            j = 0;
        }
        if(buff[i] == '[=10=]'){
            break;
        }
    }**
    for(i = 0; i < myargc - 1; i++){
        myargv[i] = string;
        printf("argv[%d]\t%s\n", i, myargv[i]);
    }
}

例如,当我输入 "a b c" 时,我的输出如下所示:

myargc 3
argv[0] abc
argv[1] abc
argv[2] abc

这是我的解决方案,不确定它是否是最佳的,但也适用于更多的单词间距。

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int i;
    int myargc = 1;
    char **myargv;
    char buff[100];
    int len = 0;
    char string[256];
    int j = 0, k =0;

    printf("Enter text: ");
    gets(buff);

    for(i = 0; buff[i] != '[=10=]'; i++){
        len++;
    }

    for(i = 0; i < len; i++)
    {
        if(buff[i]!=' ' && buff[i+1]==' ')
        {
            myargc++;
        }
    }
    printf("myargc %d\n",myargc);

    //allocating 256 bytes * number of words    
    myargv = (char**)malloc(myargc*sizeof(char*));
    for(i = 0; i < myargc; i++){
        myargv[i] = (char*)malloc(256*sizeof(char));
    }

    //iterating until the ending character
    for(i = 0; i <= len; i++){
        //building word
        if(buff[i] != ' ' && buff[i] != 0)
        {   
            string[j++] = buff[i];
        }

        //copying word to corresponding array
        else if((buff[i] == ' ' && buff[i+1] != ' ') || (buff[i] == 0))
        {
            for(int z = 0; z < j; z++){
                myargv[k][z] = string[z];
            }

            myargv[k++][j] = '[=10=]';
            j = 0;
        }

        //skipping more spaces in a row
        else continue;
    }


    for(i = 0; i < myargc; i++){
        printf("argv[%d]\t%s\n", i, myargv[i]);
    }

    }