C++ 确定字符串是否具有所有相同的字符

C++ 确定字符串是否具有所有相同的字符,c++,C++,有没有像find_first_not_of那样的函数,它返回true或false,而不是位置?我不需要位置,而是需要字符串是否包含所有相同的字符。您可以编写自己的函数: bool all_chars_same(string testStr) { char letter = testStr[0]; for (int i = 1; i < testStr.length(); i++) { if (testStr[i] != letter)

有没有像find_first_not_of那样的函数,它返回true或false,而不是位置?我不需要位置,而是需要字符串是否包含所有相同的字符。

您可以编写自己的函数:

bool all_chars_same(string testStr) {
    char letter = testStr[0];

    for (int i = 1; i < testStr.length(); i++) {
        if (testStr[i] != letter)
            return false;
    }

    return true;
}

只需检查find_first_not_of返回的值:

或者,因为你要找的是一个单一的角色,所以还有


使用yourstring.findkeyword; 你可以在这里获得详细信息

我推荐一个定义,这是更快的方法

#define find_not_of(a) (a.find_first_not_of(a[0]) != std::string::npos)

我能做的最好和最快的方法是创建一个映射,并将字符串的第一个值作为映射的键。然后遍历字符串,一旦找到一个不在映射中的字符,就完成了

 bool allSameCharacters ( string s){
  unordered_map < char , int> m;
  // m.reserve(s.size());
  m[s[0]]++;
  for (char c : s ){
    if (m.find(c) == m.end()) return false;
  }
  return true;
}

只需将find_first_not_of的返回值与std::string::npos.preference function to MACRO进行比较。任何编译器都可以自动内联此函数调用。在这里使用宏没有意义,效率很低。只需对照第一个字符检查每个字符。
bool all_same = std::all_of(str.cbegin(), str.cend(), [&](char c){ return str[0] == c; });
#define find_not_of(a) (a.find_first_not_of(a[0]) != std::string::npos)
 bool allSameCharacters ( string s){
  unordered_map < char , int> m;
  // m.reserve(s.size());
  m[s[0]]++;
  for (char c : s ){
    if (m.find(c) == m.end()) return false;
  }
  return true;
}