题目描述
定义:一个词组中每个单词的首字母的大写组合称为该词组的缩写。
比如,C语言里常用的EOF就是end of file的缩写。
提示:注意考虑两个单词中间有多个空格的情况
输入
输入的第一行是一个整数T,表示一共有T组测试数据。
接下来有T行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
输出
请为每组测试数据输出规定的缩写,每组输出占一行。
样例输入
1
end of file
样例输出
EOF
思路:
- 首先接收一个整数,表示几组测试数据
- 然后接收一组字符串,直接判断该字符串的第一个字符。若是小写字母,将其转化为大写字母。若是大写字母,则可以直接输出
- 最后从字符串的第二个元素开始遍历,如果当前字符是空格且下一个字符不是空格而是小写字母,就可以将空格之后的字符转化为大写字母,同理若其本身就是大写字母,则可以直接输出
注意:
- 一定要强制类型转换
- 使用gechar吃回车!!!
- 不要漏掉大写字母直接输出的情况
AC代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
int main()
{
int T;
cin >> T;
//吃掉输入T之后的回车
char ch = getchar();
while (T--)
{
string str;
getline(cin,str);
//判断下标为0的字符
if (str[0] >= 'a' && str[0] <= 'z')
{
//将小写字母转换为大写字母,注意要强制类型转换
cout << char(str[0] - 32);
}else
{
//大写字母直接输出
cout << char(str[0]);
}
//从下标为1的字符开始遍历
for(int i = 1;i < (int)str.size();i++)
{
if (str[i] == ' ' && str[i + 1] != ' ')
{
//小写字母则转换
if (str[i + 1] >= 'a' && str[i + 1] <= 'z')
cout << char(str[i + 1] - 32);
//大写字母则直接输出
else cout << char(str[i + 1]);
}
}
//多组测试数据,因此每组都需要换行
cout << endl;
}
return 0;
}
这题也算是多灾多难…