1039:词组缩写分数: 10
标签
题目描述
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,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;
}
}