题目来源:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1001&cid=31288&problem=Problem%20%20E
解法或类型:循环结构
Description
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
Input
输入的第一行是一个整数T,表示一共有T组测试数据;
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
Output
请为每组测试数据输出规定的缩写,每组输出占一行。
Sample Input
1
end of file
Sample Output
EOF
题意描述
提供一组单词,把每个单词的首字母提取出来,转换为大写。
解题思路
先判断提供的字符串的第一个字符是空格还是字母,是字母存入一个空的字符串,然后从所给的字符串的第二个用循环找出每个单词的首字母存入空字符串,最后把空字符串里的字母转换为大写。
时空分析:
程序代码:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
intmain()
{
int m,t,i,l;char a[1000],b[100],c[100];
scanf("%d",&m);getchar();
while(m--)
{
gets(a);
t=0;
if(a[0]>='A'&&a[0]<='z')
{
b[t]=a[0];
t++;
}
for(i=1;a[i]!='\0';i++)
{
if(a[i]>='A'&&a[i]<='z'&&a[i-1]=='')
{
b[t]=a[i];
t++;
}
}
for(i=0;i<t;i++)
{
if(b[i]>='a'&&b[i]<='z')
printf("%c",b[i]-32);
else
printf("%c",b[i]);
}
printf("\n");
}
return 0;
}
错误分析: 1、第二个for循环的控制循环次数用的t,应该是(i=0;i<t;i++)开始写成了(i=0;i<=t;i++)。因为t从零开始循环一次加1成为1,但是字符串中只有其实一个字符,所以应该是i<t,循环一次。
2、忘记把提出的字母转换为大写。