我对编程很新。我需要比较具有完全相同元素但顺序不同的两个字符串。我已尝试使用start_pt = temp.find("\"")
end_pt = temp.find("\"", start + 1) # add one to skip the opening "
quote = temp[start_pt + 1: end_pt + 1] # add one to get the quote excluding the ""
>>> print start_pt, end_pt, quote
10, 16, 'leave'
进行比较但不起作用。我尝试使用我在网上阅读的strcmpi()
,用于比较具有相同元素的字符串,但我的编译器说它不存在,即使我包含is_permutation()
。我的编译器是Borland C ++。有没有其他方法可以比较2个字符串,并将它们评估为相同的元素,但排列顺序不同?
例如<algorith.h>
和"evil"
。
答案 0 :(得分:2)
您的编译器是旧。我没有检查,但我确信它不支持std::is_permutation所需的C ++ 11。
正如评论已经指出的那样,你可以sort
字符串然后进行比较。
正如评论中指出的那样,你试图包含的标题是非标准的/不正确的(再次可能是因为你使用了一个古老的编译器 - 已经得到一个现代的; VS2015,GCC 6.1和Clang 3.8可以免费提供,所有提供相当不错的C ++ 11 / C ++ 14支持。)
答案 1 :(得分:2)
您可以计算每个字符在每个字符串上出现的次数,如果它们相等则返回true。
#include <iostream>
#include <string>
using namespace std;
bool anagrams(string s, string t){
if(s.length() != t.length())
return false;
int chArr[256];
// Set character's count to 0
for(int i=0; i<256; i++)
chArr[i] = 0;
for(int i=0; i<s.length(); i++){
chArr[s[i]]++;
chArr[t[i]]--;
}
for(int i=0; i<256; i++){
if(chArr[i] != 0)
return false;
}
return true;
}
int main(){
if(anagrams("hello, olelh"))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
答案 2 :(得分:1)
正如内森奥利弗所建议的,将两者排序,然后检查它们是否相等。源代码是:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool AreAnagrams(string s1, string s2) {
sort(s1.begin(), s1.end());
sort(s2.begin(), s2.end());
return s1 == s2;
}
int main() {
if (AreAnagrams("evil", "vile"))
cout << "Are anagrams." << endl;
else
cout << "Are not anagrams." << endl;
return 0;
}