专栏文章
题解:UVA13093 Acronyms
UVA13093题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipxwkxz
- 此快照首次捕获于
- 2025/12/03 19:44 3 个月前
- 此快照最后确认于
- 2025/12/03 19:44 3 个月前
题目大意
有多组数据,每组有两行字符串,即两个名字,分别是作者的名字和要检查的名称。对于每一组,输入满足以下要求:
- 第一行为作者的名字,第二行为要检查的名称。
- 作者的名字和要检查的名称都由空格分隔。
- 所有的单词都是由英文字母组成的。
接下来请你判断这两行的名字缩写是否相同。若相同,输出
yes;若不同,输出 no。*注:缩写即所有把每一段名字的开头的那一个字符单独拿出来并连在一起并大写。(例如
bogomolnyi prasad sommerfield 缩写为 BPS)做题思路
读懂题目后,这道题其实并不难。我这里就通过最暴力的方法来解决这道题,相信应该通俗易懂。
输入处理
这里我通过
CPPstring 来记录每个名字并且使用 getline 来输入。因为 cin 是不输入空格的,而 getline 是将一行都输入进来。输入框架如下:string s1, s2;
while (getline(cin, s1)) { //因为有多个输入,所以这里使用while,只要有输入就执行。
getline(cin, s2); //如果有能继续执行的内容,把检查的名称输进来。
}
对比缩写
对比这里就通过两个
for 循环来遍历。- 第一个循环是查找作者名字的首字母,如果找到了,就进入第二个循环。
- 第二个循环是查找要检查的名称的首字母,并将在第一个循环的首字母进行对比。
int last = 0, flag = 0; //分别记录第二个作者所查询到的地方和两个名字简写是否相同
for (int i = 0; i < s1.size(); i++) {
if (i == 0 || s1[i - 1] == ' ') {
for (int j = last; j <= s2.size(); j++) {
if (j == 0 || s2[j - 1] == ' ') {//判断是否找到第二个字符串的首字母。
if (s1[i] == s2[j]) {//判断是否相同
last = j + 1; //若相同,则记录下一次开始查找的位置。
} else {
flag = 1; //否则记录不可行。
}
break; //找到首字母后就跳出。
}
}
if (flag == 1) break; //若记录不可行,跳出,进入输出程序。
}
}
判断并输出结果
直接判断并输出就行了~
CPPif (flag == 0) cout << "yes\n";
else cout << "no\n";
参考代码
CPP#include<bits/stdc++.h>
#define int 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 s1, s2;
while (getline(cin, s1)) { //输入处理
int last = 0, flag = 0;
getline(cin, s2);
for (int i = 0; i < s1.size(); i++) { //对比缩写
if (i == 0 || s1[i - 1] == ' ') {
for (int j = last; j <= s2.size(); j++) {
if (j == 0 || s2[j - 1] == ' ') {
if (s1[i] == s2[j]) {
last = j + 1;
} else {
flag = 1;
}
break;
}
}
if (flag == 1) break;
}
}
if (flag == 0) cout << "yes\n"; //输出结果
else cout << "no\n";
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...