UVA11713 Abstract Names 题解
题目翻译
如果两组名字内除原音字母(即字母 a e i o u) 外完全相等,那么就认为这两个名字是相同的。现在要求判断两个名字是否相同。
共有 \(n \ (n\!\le\!20)\) 组数据。对于每组数据,两行分别输入两个名字。
每组数据对应一行的输出,若两名字相同则输出 Yes,不同则输出 No。
解析
“除元音外都相等”即代表“所有非元音都相等”,这代表我们只用判断非元音就行了。
我们自然就会想到将所有元音全部去掉,判断剩下的非元音是否相等,便能得到答案。
代码实现及细节
-
“将元音全部去掉”,我们可以将所有原因都替换成一个相同的字符,这样元音字母就对判断相同没有影响了。
-
“判断两字符串相等”可以使用包含在
<cstring>头文件中的函数strcmp。其返回值若为 \(0\),则代表两字符串相等。
更多关于 strcmp函数的信息:\(\boxed{\text{strcmp\_百度百科}}\)
\(\textcolor{#51C41A}{\texttt{AC}}\) 代码
你们最喜欢的部分
#include<cstdio>
#include<cstring>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
char a[25],b[25];
scanf("%s%s",a,b);
int lena=strlen(a); //strlen 获取字符串长度
int lenb=strlen(b);
for(int j=0;j<lena;j++) //注意这里要从 0 开始,因为 scanf 是从下标 0 开始读入的
if(a[j]=='a'||a[j]=='e'||a[j]=='i'||a[j]=='o'||a[j]=='u')
a[j]='-';
for(int j=0;j<lenb;j++)
if(b[j]=='a'||b[j]=='e'||b[j]=='i'||b[j]=='o'||b[j]=='u')
b[j]='-';
//分别将 a 和 b 的元音字母替换为 '-'
if(strcmp(a,b)==0) printf("Yes\n"); //strcmp 字符串判等
else printf("No\n");
}
return 0;
}
2022-06-02 21:43 撰写于洛谷,2025-08-29 20:20 迁移至博客园。
本文采用 「CC-BY-NC 4.0」 创作共享协议,转载请注明作者及出处,禁止商业使用。
作者:Jerrycyx,原文链接:https://www.cnblogs.com/jerrycyx/p/19065115

浙公网安备 33010602011771号