题解:UVA12243 Flowers Flourish from France

· · 题解

题目大意

编写一个程序,检查输入的每个句子是否所有单词的首字母相同(忽略大小写),如果是则输出 Y,否则输出 N。输入以 * 结束。

输入有多个句子,每个句子由不超过 50 个单词组成,单词之间用单个空格分隔。

每个单词由不超过 20 个英文字母(大小写均可)组成,且至少包含一个字母。

解题方法

输入

由于这里要输入一整行,且中间有空格,可以使用 getline 来逐行读取输入。只要输入为 *getline 不会读取末尾回车哦)就跳出。

统一字母大小写

为了方便后续比较,可以将所有字母转为大写(或小写)。这里将所有字符改为大写,通过 s[i] -= ' ' 将小写字母转为大写(ASCII 特性)。

for (int i = 0; i < s.size(); i++)
    if (s[i] >= 'a' && s[i] <= 'z') s[i] -= ' ';

检查首字母

signed main() { fast_running; string s; while (1) { getline(cin, s); // 读取一行输入 if (s == "") break; // 遇到 "" 结束输入

    // 将所有字母转为大写(方便比较)
    for (rint i = 0; i < s.size(); i++) {
        if (s[i] >= 'a' && s[i] <= 'z') s[i] -= ' ';
    }

    char tot = s[0];  // 记录第一个单词的首字母
    bool flag = 0;    // 标记是否出现不一致的情况

    // 遍历句子,检查每个单词的首字母
    for (rint i = 1; i < s.size(); i++) {
        if (s[i - 1] == ' ' && s[i] != tot) {  // 遇到空格后的字母与 tot 不同
            flag = 1;
            break;
        }
    }

    // 输出结果
    if (flag == 0) cout << "Y\n";
    else cout << "N\n";
}
return 0;

}


[~ 完结撒花 ~](https://www.luogu.com.cn/record/212743669)