北航计算机2015年复试-机试第3题

/*今天是北航2015年机试第三题,
题目,统计词语
输入一段含标点的英文语段,(若干行,以ctrl+z结束)
统计这段话中出现的所有词语(相同的词语只出现一次)
要求,按照字典顺序输出词语,每输出一个词换一行*/
#include<stdio.h>
char words[1000][50],words2[1000][50];
int length=0,length2=0;

//处理字符串的函数
int GetType(char c){
	if(c>='a'&&c<='z'){
		return 1;
	}
	if(c>='A'&&c<='Z'){
		return 2;
	}
	if(c==','||c=='.'||c==' '){
		return 3;
	}
	return -1;
}
//排序的法则,如果A单词在B单词之后,返回1
int shunxu(char a[],char b[]){
	int i=0,j=0;
	while(a[i]!='\0'){
		if(b[i]!='\0'){
			if(a[i]>b[i]){
				return 1;
			}
			else if(a[i]==b[i]){
				i++;
			}
			else if(a[i]<b[i]){
				return 0;
			}
		}
		else
			return 1;
	}
	if(b[i]!='\0')
		return 0;
}
//排序函数
void paixu(){
	int i=0,j=0;
	char temp[50];
	for(i=0;i<length-1;i++)
		for(j=i+1;j<length;j++){
			if(shunxu(words[i],words[j])){
			strcpy(temp,words[i]);
			strcpy(words[i],words[j]);
			strcpy(words[j],temp);
			}
		}
}
//去重函数
void quchong(){
	int i=0,j=0;
	for(i=1;i<length;i++){
		if(strcmp(words[i],words[i-1])!=0){
			strcpy(words2[j++],words[i]);
			length2++;
		}
	}
}
void HandleStr(char c[]){
	int i=0,m=0,n=0;
	while(c[i]!='\0'){
		switch(GetType(c[i])){
		case 2:c[i]=c[i]+32;//化成小写字母
		case 1:words[m][n]=c[i];
				n++;
				i++;
				break;
		case 3:if(GetType(c[i-1])==1||GetType(c[i-1])==2){
				words[m][n]='\0';	
				m++;
				n=0;
			   }i++;
				break;
		case -1:i++;break;
		}
	}
	length=m;
}
void main(){
	int i;
	char str[1000000]="",s[1024];
	while(gets(s)!=NULL){//以ctrl+z结尾的真正含义。scanf("%s",s)!=EOF)
		strcat(str,s);
	}
	strcat(str,"\0");
	HandleStr(str);
	paixu();
	quchong();
	for(i=0;i<length2;i++){
		puts(words2[i]);
	}
}

//英文单词以‘ ’隔开

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值