输入一段含标点的英文语段(若干行,以Ctrl+Z结束)
统计这段话中出现的全部词语
要求按字典顺序输出词语,每输出一个词换一行
样例输入就是一段话,输出就是这段话出现的全部词语(相同的词语只出现一次)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
char a[1000][50],ch,b[50];
int i=0,j=0,m,k;
while((ch=getchar())!=EOF){
if((ch>”a”&&ch<“z”)||(ch>”A”&&ch<“z”))
a[i][++j]=ch;
else{
i++;
j=0;}
}
m=i+1;
printf(“%d\n”,m);
for(i=0;i<m-1;i++){
k=i;
for(j=i+1;j<m;j++){
if(strcmp(a[k],a[j])>0)
k=j;
}
if(k!=i){
strcpy(b,a[i]);
strcpy(a[i],a[k]);
strcpy(a[k],b);
}
}
for(i=0;i<m;i++)
{
if(i==0)
printf(“%s\n”,a[i]);
else if(strcmp(a[i],a[i-1])<0)
printf(“%s\n”,a[i]);
}
}
统计这段话中出现的全部词语
要求按字典顺序输出词语,每输出一个词换一行
样例输入就是一段话,输出就是这段话出现的全部词语(相同的词语只出现一次)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
char a[1000][50],ch,b[50];
int i=0,j=0,m,k;
while((ch=getchar())!=EOF){
if((ch>”a”&&ch<“z”)||(ch>”A”&&ch<“z”))
a[i][++j]=ch;
else{
i++;
j=0;}
}
m=i+1;
printf(“%d\n”,m);
for(i=0;i<m-1;i++){
k=i;
for(j=i+1;j<m;j++){
if(strcmp(a[k],a[j])>0)
k=j;
}
if(k!=i){
strcpy(b,a[i]);
strcpy(a[i],a[k]);
strcpy(a[k],b);
}
}
for(i=0;i<m;i++)
{
if(i==0)
printf(“%s\n”,a[i]);
else if(strcmp(a[i],a[i-1])<0)
printf(“%s\n”,a[i]);
}
}
解决方案
20
while((ch=getchar())!=EOF)
你跟一下代码看看ch读出来的值是多少,是不是跟EOF的值一致不就知道了吗?
不过控制台程序一般本人都用回车来结束输入,判定一下等于”\n”就行了。
你跟一下代码看看ch读出来的值是多少,是不是跟EOF的值一致不就知道了吗?
不过控制台程序一般本人都用回车来结束输入,判定一下等于”\n”就行了。
10
ch 应为 int
否则不能保证正确性
否则不能保证正确性
10
Linux:Ctrl+D
Windows:Enter、Ctrl+Z、Enter
Windows:Enter、Ctrl+Z、Enter