C语言,有道题目,将 "I am a boy"这句话中的单词按由短到长的顺序排列...
发布网友
发布时间:2024-07-02 12:16
我来回答
共2个回答
热心网友
时间:2024-10-13 00:55
我把它做出来了, 你看下。。。VC6.0编译通过。不保证这个方法最简单。。。
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
//以下是函数声明
int* GetWordLenth(char sentence[]);//得到每个单词的长度,数组保存
int *GetWordIndex(char sentence[]);//得到单词首字母在句子中的索引
int CountWord (char sentence[]);//计算单词的数量
int* OrderByIndex(char sentence[]);//对单词的长度排序,插入排序法
void PrintSentence(char sentence[]);
char* ConvertSentence(char sentence[]);//将句子按单词长度顺序重新组合
//以下是函数的定义
char* ConvertSentence(char sentence[])
{
int* index =OrderByIndex(sentence);
int *WordLen =GetWordLenth(sentence);
char* result = (char*)malloc(strlen(sentence)+1);
int num = CountWord(sentence);
int n = 0 ;
for(int i =0 ;i<num;i++)
{
int j = index[i];
while((sentence[j]!=' ') && (sentence[j]!='\0') )
{
result[n]=sentence[j];
n++;
j++;
}
result[n]=' ';
n++;
}
return result;
}
void PrintSentence(char sentence[])
{
int len=strlen(sentence);
for(int i =0;i<len;i++)
{
cout<<sentence[i];
}
cout<<endl;
}
int* OrderByIndex(char sentence[])//对单词的长度排序,插入排序法,返回排序后的索引
{
int num=CountWord(sentence);//取得单词个数
int* index=GetWordIndex(sentence);
int *WordLen =GetWordLenth(sentence);
for(int i=1;i<num;i++)//从第二个开始排起
{
//j为已排序区域最后一个
int j= i-1;//已经排好序的位置j
int x = WordLen[i];//保存要插入的数
int y = index[i];
//要插入的数和已排序区域的数比较,当要插入的数比比较的数小时,插入比较的数的左边
while ((j>=0) && (x<WordLen[j]))
{
WordLen[j+1]=WordLen[j];
index[j+1]=index[j];
j--;
}
WordLen[j+1]=x;
index[j+1]=y;
}
return index;
}
int* GetWordLenth(char * sentence)
{
int* index=GetWordIndex(sentence);//取得单词索引
int num=CountWord(sentence);//取得单词个数
int* WordLen =(int*)malloc(num*sizeof(int));
//取得前n-1 个单词的长度
for(int i =0; i<num-1;i++)
{
WordLen[i]=index[i+1]-index[i]-1;
}
//取得最后一个单词的长度
WordLen[num-1]=strlen(sentence)-index[num-1];
return WordLen;
}
int CountWord (char sentence[])//计算单词的数量
{
int num = 0;
for(int i=0;i<(int)strlen(sentence);i++)
{
if(sentence[i]==' ')
{
num++;
}
}
return ++num;
}
int* GetWordIndex(char sentence[])//得到单词首字母在句子中的索引
{
int num =CountWord(sentence);
int *Index=(int *)malloc(num*sizeof(int));
Index[0]=0;//第一个单词的首字母索引肯定为0
int j = 1;//lenth数组的索引
for(int i =0;i<(int)strlen(sentence);i++)//i是sentence[]的索引
{
if(sentence[i]==' ')//一个单词结束,记录索引
{
Index[j]=i+1;
j++;
}
}
return Index;
}
void main()
{
char sentence[] ="I am a boy";
char* res=ConvertSentence(sentence);
PrintSentence(res);
}
热心网友
时间:2024-10-13 01:02
给你点提示哈,判断一个单词结束的标准就是它后面有无空格 或者是不是最后一个字符。了解了这一点就可以把单词扣出来,然后用strlen来算长度,按照长度排序就行了