专栏文章
题解:UVA12243 Flowers Flourish from France
UVA12243题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipo6qcm
- 此快照首次捕获于
- 2025/12/03 15:12 3 个月前
- 此快照最后确认于
- 2025/12/03 15:12 3 个月前
题目大意
编写一个程序,检查输入的每个句子是否所有单词的首字母相同(忽略大小写),如果是则输出
Y,否则输出 N。输入以 * 结束。输入有多个句子,每个句子由不超过 个单词组成,单词之间用单个空格分隔。
每个单词由不超过 个英文字母(大小写均可)组成,且至少包含一个字母。
解题方法
输入
由于这里要输入一整行,且中间有空格,可以使用
getline 来逐行读取输入。只要输入为 *(getline 不会读取末尾回车哦)就跳出。统一字母大小写
为了方便后续比较,可以将所有字母转为大写(或小写)。这里将所有字符改为大写,通过 s[i] -= ' ' 将小写字母转为大写(ASCII 特性)。
CPPfor (int i = 0; i < s.size(); i++)
if (s[i] >= 'a' && s[i] <= 'z') s[i] -= ' ';
检查首字母
- 建立几个变量,这里
tot用来记录第一个单词的首字母,flag用来记录所有单词首字母是否相同。 - 首先用变量
tot记录第一个单词的首字母(即s[0])。 - 然后遍历句子,每当遇到空格时,检查下一个字符是否为
tot。 - 如果发现不一致,设置
flag = 1并提前退出循环。
char tot = s[0];
bool flag = 0;
for (int i = 1; i < s.size(); i++) {
if (s[i - 1] == ' ' && s[i] != tot) {
flag = 1;
break;
}
}
完成这几个部分以后,这道题就可以很轻松解决了~
参考代码
CPP#include<bits/stdc++.h>
#define int long long
#define rint register long long
#define fast_running ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0);
using namespace std;
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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...