C语言,单词分割有个地方不太明白

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

int GetWords(char *sentence, char *words[]);

void SortStrings(const char *strs[], int count);

 

int main()

{

    char str[200];

    int nWords = 0;

    char *words[20];

    int i;

 

    printf("input a string: ");

    gets(str);

 

    nWords = GetWords(str, words);

    SortStrings(words, nWords);

 

    puts("output:");

    for(i=0; i<nWords; i++)

        puts(words[i]);

    system("pause");

    return 0;

}


 

int GetWords(char *str, char *words[])

{

/******start******/

int i, cnt = 0;

    char ch = ' ';

    for (i = 0; str[i] != '\0'; i++)

    {

        if (ch == ' ' && str[i] != ' ')

        {

            words[cnt] = str+i;

            ch = str[i];

            cnt++;

        }

        else if (str[i] == ' ')

        {

            ch = str[i];

            str[i] = '\0';

        }

        else if (str[i] == '.')

        {

            str[i] = '\0';

            break;

        }

        

    }

    return cnt;

/******end******/

}

 

void SortStrings(const char *strs[], int count)

{

/******start******/

int i, j;

    const char *tmp;

    for (i = 0; i < count; i++)

    {

        for (j = 0; j < count - i - 1; j++)

        {

            if (strcmp(strs[j], strs[j+1]) > 0)

            {

                tmp=strs[j];

                strs[j]=strs[j+1];

                strs[j+1]=tmp;

            }

        }

    }

/******end******/

}

 

36行,为什么一定要有ch !=  ' '这一条件?

你读到系统里的char * 数组是一个长字符串。

"This is a test word.\0"

然后要去给每个单词拆分的话,就必须找到空格。然后给每个单词后面加 \0

因为字符串打印时,是通过"\0"来截取打印的。

找到单词的第一个字母,前面一定是空格,或者是句子的第一个字母


希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html