c++ - 在QString的开头,C++ 如何计算重复字符?

  显示原文与译文双语对照的内容
92 3

我正在处理一行行,我需要计算开始时出现的哈希值。


# item 1


## item 1, 1


## item 1, 2


# item 2



等等。

如果每行都是 QString,如何返回在字符串开始处发生的哈希数?


QString s("### foo # bar");


int numberOfHashes = s.count("#");//Answer should be 3, not 4



谢谢。

时间: 原作者:

97 3

这里我使用标准算法 find_if_not that将迭代器获得一个不是哈希的第一个字符。 然后,返回从字符串开始到迭代器的距离。


int number_of_hashes(QString const& s)


{


 auto it = std::find_if_not(std::begin(s), std::end(s), [](QChar c){return c == '#';});


 return std::distance(std::begin(s), it);


}



收费:find_if_not 函数只接受一元谓词,而不是值,因此你必须传递一个lambda谓词。

107 1

int numberOfHashes = 0;


int size = s.size();


QChar ch('#');


for(int i = 0; (i <size) && (s[i] == ch); ++i) {


 ++numberOfHashes;


} 



原作者:
78 5

不需要循环。


QString s("### foo # bar");


int numberOfHashes = QRegularExpression("^[#]*").match(s).capturedLength();



原作者:
...