C语言指针习题——拆分句子 排序输出

C语言指针习题——拆分句子 排序输出

写一个分词函数,提取出一个英文句子中的所有单词,保存到一个单词数组中。另写一个排序函数对字符串数组进行升序排序。在主函数中调用分词函数得到单词数组,调用排序函数对单词排序,然后在主函数中输出各单词。注意:只允许在/start/和/end/之间添加代码。

约定:

  1. 句子长度不超过200个字母,句子中不超过20个单词。

  2. 句子中英文单词之间只有一个空格,句子结束处是一个英文句点(即小数点)。

规定算法:分词时,当查找空格或句点时,将其替换为字符串终止符,并将单词开始位置的地址保存到指针数组中。

程序运行如下图:

在这里插入图片描述
C语言源代码:

#include <stdio.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]);

	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];//将此时读取到的字符赋值给ch,从而在下一个循环的时候进行判断 
			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)//当前面的单词大于后一个单词时,strcmp函数的返回值即为1 
			{
				tmp=strs[j];
				strs[j]=strs[j+1];
				strs[j+1]=tmp;
			}
		}
	}
/******end******/
}

难度系数:⭐⭐⭐

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值