UVA11713 Abstract Names 题解

题目翻译

如果两组名字内除原音字母(即字母 a e i o u) 外完全相等,那么就认为这两个名字是相同的。现在要求判断两个名字是否相同。

共有 \(n \ (n\!\le\!20)\) 组数据。对于每组数据,两行分别输入两个名字。

每组数据对应一行的输出,若两名字相同则输出 Yes,不同则输出 No

解析

“除元音外都相等”即代表“所有非元音都相等”,这代表我们只用判断非元音就行了。

我们自然就会想到将所有元音全部去掉,判断剩下的非元音是否相等,便能得到答案。

代码实现及细节

  1. “将元音全部去掉”,我们可以将所有原因都替换成一个相同的字符,这样元音字母就对判断相同没有影响了。

  2. “判断两字符串相等”可以使用包含在 <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 迁移至博客园。

posted @ 2025-08-29 20:22  Jerrycyx  阅读(7)  评论(0)    收藏  举报