一、题目链接
http://noi.openjudge.cn/ch0107/17/
二、解题思路(Java)
三、解题思路(C++)
四、Java程序
import java.util.Scanner;
public class Main {
/**
* 判断两个字符串在忽略大小写且忽略空格后是否相等
*
* @param one String类型的对象,代表待比较的字符串
* @param two String类型的对象,代表待比较的字符串
* @return 逻辑值,true当且仅当one和two在忽略大小写且忽略空格后相等,否则false
*/
public boolean isEqual(String one, String two) {
one = one.replace(" ", ""); // 移除one中空格
two = two.replace(" ", ""); // 移除two中空格
// one和two在忽略大小写后相等,返回true,否则false
return one.equalsIgnoreCase(two);
}
public static void main(String[] args) {
Main test = new Main();
Scanner input = new Scanner(System.in);
String one = input.nextLine();
String two = input.nextLine();
System.out.print(test.isEqual(one, two) ? "YES" : "NO");
}
}
五、C++程序
#include <iostream>
using namespace std;
int main()
{
string one; // 待比较的字符串
string two; // 待比较的字符串
getline(cin, one);
getline(cin, two);
int i;
int n = one.length();
int m = two.length();
char A[n]; // 存放one中的字符,不含空格
char B[m]; // 存放two中的字符,不含空格
int p = 0; // A的有效长度
int q = 0; // B的有效长度
/* 将one中的非空格字符推入A中,推入的同时将大写字母转为对应小写字母 */
for (i = 0; i < n; i++)
{
if (one[i] != ' ') // 如果当前字符one[i]不是空格,则其为字母
{
if (isupper(one[i])) // 如果one[i]是大写字母
{
one[i] = tolower(one[i]); // 则将其转为对应的小写字母
}
A[p] = one[i]; // 将one[i]推入A中
p++; // A的有效长度增加1
}
}
/* 将two中的非空格字符推入B中,推入的同时将大写字母转为对应小写字母 */
for (i = 0; i < m; i++)
{
if (two[i] != ' ') // 如果当前字符two[i]不是空格,则其为字母
{
if (isupper(two[i])) // 如果two[i]是大写字母
{
two[i] = tolower(two[i]); // 则将其转为对应的小写字母
}
B[q] = two[i]; // 将two[i]推入B中
q++; // B的有效长度增加1
}
}
if (p != q) // 如果A和B的有效长度不同
{
cout << "NO"; // 则说明one和two不相等
}
else // 否则,A和B的有效长度相同,也即p == q
{
/* 从第一个字符开始,到最后一个字符为止 */
for (i = 0; i < p; i++)
{
if (A[i] != B[i]) // 如果当前两个字符不同
{
cout << "NO"; // 则说明one和two不相等
return 0; // 直接退出程序
}
}
cout << "YES"; // 以上没有退出程序,说明one和two不相等
}
return 0;
}