给定两个字符串s和t,编写一个函数来确定t是否是s的变位,即t是否是通过重新排列s中的字母而形成的。 请编写一个名为isAnagram(string s,string t)的函数来实现上述算法,返回true或false。在主函数中调用这个函数并输出结果。注意,输入字符串可能包含非字母字符,这里不考虑大小写。用c++写
时间: 2024-03-06 21:46:48 浏览: 214
好的,这是一个简单的字符串处理问题。我可以帮你写一个C++的实现,如下所示:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isAnagram(string s, string t) {
// 如果两个字符串长度不相等,则不可能是变位字符串
if (s.length() != t.length()) {
return false;
}
// 处理字符串中的非字母字符
for (int i = 0; i < s.length(); i++) {
if (!isalpha(s[i])) {
s.erase(i, 1);
i--;
}
if (!isalpha(t[i])) {
t.erase(i, 1);
i--;
}
}
// 将字符串中的字母按照字典序排序
sort(s.begin(), s.end());
sort(t.begin(), t.end());
// 判断两个字符串是否相等
return s == t;
}
int main() {
string s = "anagram";
string t = "nagaram";
if (isAnagram(s, t)) {
cout << "t是s的变位字符串" << endl;
} else {
cout << "t不是s的变位字符串" << endl;
}
return 0;
}
```
在这个实现中,我们首先判断两个字符串的长度是否相等,如果不相等,则不可能是变位字符串,直接返回false。然后我们对两个字符串中的非字母字符进行处理,将其删除。接着,我们将字符串中的字母按照字典序排序,最后判断两个字符串是否相等即可。
阅读全文