实现词组缩写c语言,词组缩写

标签

简单字符串处理

题目描述

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

输入格式

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

输出

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

样例输入

1 end of file

样例输出

EOF

#include

#include

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

#include

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

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;

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值