计算string中的字符出现次数

如何计算像"bla_bla_blabla_bla"这样的string中的"_"的数量?

 #include <algorithm> std::string s = "a_b_c"; size_t n = std::count(s.begin(), s.end(), '_'); 

伪代码:

 count = 0 For each character c in string s Check if c equals '_' If yes, increase count 

编辑:C ++示例代码:

 int count_underscores(string s) { int count = 0; for (int i = 0; i < s.size(); i++) if (s[i] == '_') count++; return count; } 

请注意,这是与std::string一起使用的代码,如果您使用char* ,请用strlen(s)replaces.size() strlen(s)

另外请注意:我可以理解你想要“尽可能小”的东西,但我build议你改用这个解决scheme。 正如你所看到的,你可以使用一个函数为你封装代码,所以你不必每次写出for循环,但是可以在代码的其余部分使用count_underscores("my_string_") 。 使用先进的C ++algorithm在这里肯定是可能的,但我认为这是过度的。

具有适当命名variables的老式解决scheme。 这给了代码一些精神。

 #include <cstdio> int _(char*__){int ___=0;while(*__)___='_'==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string \"%s\" contains %d _ characters\n",__,_(__));} 
 #include <boost/range/algorithm/count.hpp> std::string str = "a_b_c"; int cnt = boost::count(str, '_'); 

你把它命名为… Lambda版本… 🙂

 using namespace boost::lambda; std::string s = "a_b_c"; std::cout << std::count_if (s.begin(), s.end(), _1 == '_') << std::endl; 

你需要几个包括…我把你作为一个练习…

std :: string有几种search方法,但是查找可能是你正在寻找的东西。 如果你的意思是一个C风格的string,那么相当于strchr。 但是,在任何一种情况下,您也可以使用for循环并检查每个字符 – 循环基本上是这两个字符的结尾。

一旦你知道如何find下一个起始位置的字符,你不断地提前search(即使用一个循环),随时计数。

答案很简单,我认为你应该按照你的脑子或书中的计算。 代码已经给出,这就是为什么我不重复。

我只是重新排列了上面的代码:

 #include <bits/stdc++.h> using namespace std; int main() { string s="Sakib Hossain"; int cou=count(s.begin(),s.end(),'a'); cout<<cou; } 

您可以使用string函数在源string中查找“_”的出现。 find()函数需要2个参数,第一个string的出现位置,第二个参数是起始位置。while循环用于查找直到源string结束的位置。

例:

 string str2 = "_"; string strData = "bla_bla_blabla_bla_"; size_t pos = 0,pos2; while ((pos = strData.find(str2, pos)) < strData.length()) { printf("\n%d", pos); pos += str2.length(); } 

我会这样做:

 #include <iostream> #include <string> using namespace std; int main() { int count = 0; string s("Hello_world"); for (int i = 0; i < s.size(); i++) //can't be i <= s.size() because s.at(s.size()) will result in overflow { if (s.at(i) == '_') count++; } cout << endl << count; cin.ignore(); return 0; } 
 public static void main(String[] args) { char[] array = "aabsbdcbdgratsbdbcfdgs".toCharArray(); char[][] countArr = new char[array.length][2]; int lastIndex = 0; for (char c : array) { int foundIndex = -1; for (int i = 0; i < lastIndex; i++) { if (countArr[i][0] == c) { foundIndex = i; break; } } if (foundIndex >= 0) { int a = countArr[foundIndex][1]; countArr[foundIndex][1] = (char) ++a; } else { countArr[lastIndex][0] = c; countArr[lastIndex][1] = '1'; lastIndex++; } } for (int i = 0; i < lastIndex; i++) { System.out.println(countArr[i][0] + " " + countArr[i][1]); } } 

尝试

 #include <iostream> #include <string> using namespace std; int WordOccurrenceCount( std::string const & str, std::string const & word ) { int count(0); std::string::size_type word_pos( 0 ); while ( word_pos!=std::string::npos ) { word_pos = str.find(word, word_pos ); if ( word_pos != std::string::npos ) { ++count; // start next search after this word word_pos += word.length(); } } return count; } int main() { string sting1="theeee peeeearl is in theeee riveeeer"; string word1="e"; cout<<word1<<" occurs "<<WordOccurrenceCount(sting1,word1)<<" times in ["<<sting1 <<"] \n\n"; return 0; }