词组缩写

来源:互联网 发布:自学编程入门基础知识 编辑:程序博客网 时间:2024/04/30 03:28

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>intmain(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;} }


0 0