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 matlab中使用gurobi时报错
  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂