C++ 判断两个单词是否为字母异位词 - 代码实现及详解
C++ 判断两个单词是否为字母异位词 - 代码实现及详解
两个词如果包含相同的字母,但次序不同,则称为字母异位词。例如:'silent' 和 'listen' 是字母异位词。
本篇文章将介绍如何使用 C++ 编写一个函数来判断两个单词是否为字母异位词。我们将提供详细的代码实现步骤,并解释算法的思路。
算法思路
-
首先判断两个字符串的长度是否相等,如果不相等则一定不是字母异位词。
-
将两个字符串中的字符按照字典序排序,然后逐个比较每个字符是否相同,如果都相同则是字母异位词,否则不是。
代码实现
#include <iostream>
#include <string>
#include <algorithm> // sort函数需要用到的头文件
using namespace std;
bool isAnagram(const string& s1, const string& s2) {
// 首先判断两个字符串的长度是否相等
if (s1.length() != s2.length()) {
return false;
}
// 将两个字符串按照字典序排序
string sorted_s1 = s1;
string sorted_s2 = s2;
sort(sorted_s1.begin(), sorted_s1.end());
sort(sorted_s2.begin(), sorted_s2.end());
// 逐个比较每个字符是否相同
for (int i = 0; i < s1.length(); i++) {
if (sorted_s1[i] != sorted_s2[i]) {
return false;
}
}
return true;
}
int main() {
string s1, s2;
getline(cin, s1);
getline(cin, s2);
if (isAnagram(s1, s2)) {
cout << 'anagrams' << endl;
} else {
cout << 'not anagrams' << endl;
}
return 0;
}
代码解释
#include <iostream>: 引入标准输入输出流库,用于从控制台输入和输出数据。#include <string>: 引入字符串库,用于处理字符串。#include <algorithm>: 引入算法库,包含排序函数sort。using namespace std;: 使用标准命名空间,简化代码书写。bool isAnagram(const string& s1, const string& s2): 定义一个名为isAnagram的布尔类型函数,用于判断两个字符串s1和s2是否为字母异位词。if (s1.length() != s2.length()) { return false; }: 首先判断两个字符串的长度是否相等,如果不相等则一定不是字母异位词,直接返回false。string sorted_s1 = s1; string sorted_s2 = s2;: 分别创建两个字符串sorted_s1和sorted_s2,用于存储排序后的字符串s1和s2。sort(sorted_s1.begin(), sorted_s1.end()); sort(sorted_s2.begin(), sorted_s2.end());: 使用sort函数对sorted_s1和sorted_s2进行字典序排序。for (int i = 0; i < s1.length(); i++) { if (sorted_s1[i] != sorted_s2[i]) { return false; } }: 遍历排序后的字符串,逐个比较每个字符是否相同,如果发现不同则直接返回false。return true;: 如果所有字符都相同,则返回true,表示两个字符串为字母异位词。int main() { ... }: 程序的入口函数。getline(cin, s1); getline(cin, s2);: 从控制台输入两个字符串,分别存储到s1和s2中。if (isAnagram(s1, s2)) { cout << 'anagrams' << endl; } else { cout << 'not anagrams' << endl; }: 调用isAnagram函数判断两个字符串是否为字母异位词,并根据结果输出 'anagrams' 或 'not anagrams'。
总结
这篇文章介绍了如何使用 C++ 编写一个函数来判断两个单词是否为字母异位词。代码实现简单易懂,算法思路清晰,可以帮助读者更好地理解字母异位词的判定方法。
原文地址: https://www.cveoy.top/t/topic/m5MB 著作权归作者所有。请勿转载和采集!