C ++在检查Anagram时如何忽略upper和lower之间的区别?

时间:2018-03-16 05:50:50

标签: c++ for-loop anagram

bool isAnagram(string s1, string s2){
   if(s1.length() != s2.length())
      return false;

  for(int i =0; i <s1.length();i++){
      int pos = (s2.find(s1[i]);
                 if(pos<0)
                 return false;
                 s2.erase(pos,1);

               }
                 return true;

                 return false;

               }

我编写了关于检查Anagram的代码,但忽略了忽略上下差异的要求。我根本不知道。你能帮助我吗?谢谢!

4 个答案:

答案 0 :(得分:1)

在比较之前将两者都转换为小写

std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);

答案 1 :(得分:0)

简单的方法是将字符串设置为小写(或大写),然后对它们进行排序。如果s1s2是彼此的字谜,则结果应相同。

答案 2 :(得分:0)

您可以使用算法库将大写转换为小写。 在循环之前添加以下行以将其转换为小写。

#include <algorithm>
#include <string>
std::transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
std::transform(s2.begin(), s2.end(), s2.begin(), ::tolower);

答案 3 :(得分:0)

您可以简单地使用STL algorithm

的强大功能
#include <iostream>
#include <algorithm>

using namespace std;

bool isSameChar(int a, int b)
{
    return tolower(a) == tolower(b);
}

bool isAnagram(const string& a, const string& b)
{
    return a.size() == b.size()
        && is_permutation(a.begin(), a.end(), b.begin(), isSameChar);
}

int main()
{
    cout << isAnagram("AbcDE", "ebCda") << endl; // true
    cout << isAnagram("AbcDE", "ebCdaa") << endl; // false
    cout << isAnagram("AbcDE", "ebCde") << endl; // false

    return 0;
}