题目描述
输入一个英文句子,把句子中的单词(不区分大小写)按出现次数按从多到少把单词和次数在屏幕上输出来,要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。
输入描述:
输入有若干行,总计不超过1000个字符。
输出描述:
输出格式参见样例。
示例1
输入
复制
A blockhouse is a small castle that has four openings through which to shoot.
输出
复制
a:2
blockhouse:1
castle:1
four:1
has:1
is:1
openings:1
shoot:1
small:1
that:1
through:1
to:1
which:1
#include<stdio.h>
#include<string.h>
//A blockhouse is a small castle that has four openings through which to shoot.
int main(){
void sort(char name[][100], int n);
int i, count=0, j=0;
char word[1000][100], str[1000];
char *p;
gets(str);//输入字符串
p=str;// 将输入值得地址赋值给指针
for(;*p!=0; p++){
if(*p!=' ' && *p != ',' && *p != '.'){//分割单词
if(*p>='A'&& *p<='Z') //大写变小写
*p += 32;
word[count][j++]=*p;
}
//遇到空格、逗号、句号
else{
if(j!=0){
word[count][j++]='\0';//单词结束标志
count++;
j=0;
}
}
}
//将分割后的单词排序
sort(word,count);
int sum = 1;
for(i=0;i<count; i++){
if(strcmp(word[i],word[i+1])== 0)
sum++;
else{
printf("%s:%d\n", word[i],sum);
sum = 1;
}
}
return 0;
}
void sort(char name[][100], int n){
char temp[100];
int i, j, k;
for(i=0; i<n-1; i++){
k=i;
for(j=i+1; j<n; j++){
if(strcmp(name[k], name[j]) > 0) k=j;
}
if(k != i){
strcpy(temp, name[i]);
strcpy(name[i], name[k]);
strcpy(name[k], temp);
}
}
}