10:单词排序
描述
输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典序输出这些单词,要求重复的单词只输出一次。(区分大小写)
输入
一行单词序列,最少1个单词,最多100个单词,每个单词长度不超过50,单词之间用至少1个空格间隔。数据不含除字母、空格外的其他字符
输出
按字典序输出这些单词,重复的单词只输出一次。
样例输入
She wants to go to Peking University to study Chinese
样例输出
Chinese
Peking
She
University
go
study
to
wants
C语言代码
#include<stdio.h>
#include<string.h>
void sort(char (*p)[51],int wordnum);
int main()
{
char printf_string[5000],word[100][51],c,j,k,wordnum;
wordnum=0; j=0;
while(1)
{
c=getchar();
if(c != ' ' && c != '\n') //k=1,单词找到了
{
k=1;
word[wordnum][j++]=c;
}
else if(c == ' ' && k == 1) //单词找到后的空格,表示一个单词找完了。
{
word[wordnum][j]='\0'; k=0; j=0; wordnum++;
}
else if(c == '\n' && k == 1) //这个情况针对输入最后一个单词后换行
{
word[wordnum][j]='\0'; wordnum++; break; //这个情况针对输入最后一个单词后是空格后换行
}
else if(c == '\n') break;
}
sort(word,wordnum); //传递指向一维数组的指针和单词数
for(j=0;j < wordnum;++j)
{ //注意传递的指针是指向一维数组首元素的地址。
if( j != 0 && (strcmp(*(word+j),*(word+j-1)) != 0) ) printf("\n%s",word+j);
else if(j == 0) printf("%s",word+j);
}
}
void sort(char (*p)[51],int wordnum)
{
int i,j;
char string[51];
for(i=0;i < wordnum;++i)
for(j=0;j < wordnum;++j)
if(strcmp(*(p+i),*(p+j)) < 0) //字典序排序的问题可以选择strcmp函数进行对比关系,
{
strcpy(string,*(p+i));
strcpy(*(p+i),*(p+j)); //注意传递的指针是指向一维数组首元素的地址。
strcpy(*(p+j),string);
}
}
收获
- 1.对于英文字典序的用strcmp函数比较好
- 2.注意strcmp函数传递的指针是指向一维数组首元素的地址,当传递实参时,对应的基类型应相同。对于指向行的指针,要转化为指向列的指针才能传递!