14. 句子缩写(卡码网)
题目描述
输出一个词组中每个单词的首字母的大写组合。
输入
输入的第一行是一个整数n,表示一共有n组测试数据。(输入只有一个n,没有多组n的输入)
接下来有n行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
输出
请为每组测试数据输出规定的缩写,每组输出占一行。
样例输入
1
ad dfa fgs
样例输出
ADF
提示
注意:单词之间可能有多个空格
题解1(c++版本)
#include<iostream>
#include<string>
using namespace std;
char changeChar(char & a) { // 小写变大写
if (a >= 'a' && a <= 'z') a -= 32;
return a;
}
int main() {
int n;
string result, s;
cin >> n;
getchar(); // 吸收一个回车,因为输入n之后,要输入一个回车
while (n--) {
result = "";
getline(cin, s);
result += changeChar(s[0]);
for (int i = 1; i < s.size() - 1; i++) { // 单词之间可能有多个空格
if (s[i] == ' ' && s[i + 1] != ' ') result += changeChar(s[i + 1]);
}
cout << result << endl;
}
}
题解2(Go版本)
package main
import (
"os"
"bufio"
"fmt"
"strings"
)
func main(){
var n int
fmt.Scan(&n)
inputs := bufio.NewScanner(os.Stdin)
for i := 0; i < n && inputs.Scan(); i++ {
input := inputs.Text()
words := strings.Fields(input)
var res string
for _, word := range words {
res += word[:1]
}
fmt.Println(strings.ToUpper(res))
}
}