首页 > 代码库 > 词组缩写

词组缩写

1039:词组缩写分数: 10

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:35
解决: 11

标签

  • 简单字符串处理

题目描述

定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。

输入格式

输入的第一行是一个整数T,表示一共有T组测试数据。
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。

输出

请为每组测试数据输出规定的缩写,每组输出占一行。

样例输入

1
end of file

样例输出

EOF




#include<stdio.h>
#include<string.h>
	int main(){
		int i,n,sign=1;
		char word[1000];
		scanf("%d\n", &n);
		while(n--){
			gets(word);
			for(i=0;;i++){
				
//				if(word[i]=='\0')
//					break;					
//				if(sign==1){
//				if(word[i]<='Z'){
//					printf("%c",word[i]);
//					sign=0;	}
//				else{
//					printf("%c",word[i]-32);
//					sign=0;
//				}				
//			}
//				else if(sign==0){
//					if(word[i]==' ')  //最终问题出在这里的==变成了=,导致这个if永远成立! 
//						sign=1;
//					if(word[i]==' '&&word[i+1]==' '&&word[i+2]!=' ')
//						sign=1,i++;
//					if(word[i]==' '&&word[i+1]==' '&&word[i+2]==' ')
//						sign=1,i=i+2;
//					
				//修正!
				if(word[i]=='\0')
					break;
				if(i==0&&word[i]!=' '){
					if(word[i]<='z'&&word[i]>='a')
					   printf("%c",word[i]-32);
					else if(word[i]<='Z'&&word[i]>='A')
						printf("%c",word[i]);
						
				}
				if(i>0&&word[i-1]==' '&&word[i]<='Z'&&word[i]>='A')
					printf("%c",word[i]) ;
				if(i>0&&word[i-1]==' '&&word[i]<='z'&&word[i]>='a')
					printf("%c",word[i]-32) ;
				
			}
//			
//			sign=1;
			printf("\n");
		}
	}



补充:

后来学了strtok的分割函数后,做出了另外一种方法,用了很多指针

#include<string.h>
#include<stdio.h>
	int	main(void){
		int i=0,j,n;
		char *p[10];//一个元素存储一个字符串的地址 
		char word[100];
		char *buf=word;
		char ch[10];
		scanf("%d\n",&n);
		while(n--){
		gets(word);
		while((p[i]=strtok(buf," "))!=NULL){
			buf=NULL;
			i++;
		}//分割字符串,有i个单词
		for(j=0;j<i;j++){
			strcpy(ch,p[j]);//不需要用*p[j],因为p[j]=“。。。” 
							//指针可以作为strcpy的参数,事实上,数组本身就是指针
			if(ch[0]<='Z'&&ch[0]>='A') 
				printf("%c",ch[0]);
			else if(ch[0]<='z'&&ch[0]>='a')
				printf("%c",ch[0]-32);
		}
		
		
		printf("\n");
		buf=word;
		i=0;
		} 
	}


词组缩写