symming 2021-05-07 22:02 采纳率: 78.6%
浏览 63
已采纳

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 !=  ' '这一条件?

  • 写回答

3条回答 默认 最新

  • bosaidongmomo 2021-05-09 09:49
    关注

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

    "This is a test word.\0"

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记