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

Determine If String Has All Same Character

本文关键字:字符 字符串 是否      更新时间:2023-10-16

是否有像find_first_not_of这样的函数返回真或假而不是位置?我不需要位置,而是字符串是否包含所有相同的字符。

您可以编写自己的函数:

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:

bool all_chars_same(string testStr) {
    return testStr.find_first_not_of(testStr[0]) == string::npos;
}

仅检查find_first_not_ofstring::npos的返回值:

// needs to check if str.size() > 0
bool all_same = str.find_first_not_of(str[0]) == string::npos;

或者,因为您正在寻找单个字符,也有std::all_of

bool all_same = std::all_of(str.cbegin(), str.cend(), [&](char c){ return str[0] == c; });

use yourstring.find(keyword);你可以在这里看到细节http://www.cplusplus.com/reference/string/string/find/

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

#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;
}