2015年北航机试第三题统计词语
题目大意:给一个写有英文句子的txt文件,从中提取出单词,并对其按词典序排序,并输出(不能重复输出)
AC代码
#include<stdio.h>
#include<string.h>
char ch[1000000];//字符个数
char str[1000][100];//单词个数
char temp[100];//排序时的中间变量
int main(){
int i=0,size=0,k=0,j=0,sizeWord=0;
FILE *fp=fopen("1.txt","r");//以只读方式打开一个文件
if(!fp){
printf("can not open the file!\n");
return 0;
}
//---------------------------------------------
//读取文件中所有的字符,将其存储到ch[]数组里
i=0;
while(!feof(fp)){//文件结束检测函数,结束则返回非0,没结束返回0
fscanf(fp,"%c",&ch[i]);//格式化读函数,从fp所指的磁盘文件中读取一个char到变量ch[i]中,而不是从键盘读取
i++;
}
//---------------------------------------------
size=i;//文件中字符的个数
k=0;//单词的个数
//---------------------------------------------
//提取所有的单词到str[][]这个数组里
for(i=0;i<size;i++){
if(ch[i]==','||ch[i]=='.'||ch[i]==' '){
continue;
}
else{
j=0;
while(ch[i]!=','&&ch[i]!='.'&&ch[i]!=' '){
str[k][j++]=ch[i++];
if(i==size){
break;
}
}
str[k++][j]='\0';
}
}
//-----------------------------------------------
sizeWord=k;//整个文件中单词的数量
//-----------------------------------------------
//给这些单词str[][]按字典序排序
for(i=0;i<sizeWord;i++){
for(j=i+1;j<sizeWord;j++){
if(strcmp(str[i],str[j])>0){
//交换
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
}
//-----------------------------------------------
//输出--注意:重复单词不要输出
printf("%s",str[0]);
strcpy(temp,str[0]);
for(i=1;i<sizeWord;i++){
if(strcmp(str[i],temp)==0){
continue;
}
else{
printf("%s\n",str[i]);
strcpy(temp,str[i]);
}
}
return 0;
}