C ++에서 문자열의 문자 발생 수 계산 어떻게 계산 “bla_bla_blabla_bla”합니까?

"_"문자열 의 수를 어떻게 계산 "bla_bla_blabla_bla"합니까?



답변

#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*대체 s.size()와 함께 strlen(s).

또한 참고 : “가능한 한 작은 것”을 원한다는 것을 이해할 수 있지만 대신이 솔루션을 사용하는 것이 좋습니다. 보시다시피 함수를 사용하여 코드를 캡슐화 할 수 있으므로 for매번 루프 를 작성할 필요는 없지만 count_underscores("my_string_")나머지 코드에서 사용할 수 있습니다. 여기서는 고급 C ++ 알고리즘을 사용할 수 있지만 과도하다고 생각합니다.


답변

적절하게 명명 된 변수가있는 구식 솔루션. 이것은 코드에 정신을 부여합니다.

#include <cstdio>
int _(char*__){int ___=0;while(*__)___='_'==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string \"%s\" contains %d _ characters\n",__,_(__));}

편집 : 약 8 년 후,이 대답을 보면서 나는 이것을했습니다. 이것은 독성이 있고 OK가 아닙니다. 게시물을 삭제하지 않습니다. StackOverflow에서 분위기를 전환하는 데 도움이되는이 사과를 추가하고 있습니다. OP : 죄송합니다. 제 트롤링에도 불구하고 숙제를 제대로 하셨 으면 좋겠습니다. 저와 같은 답변으로 사이트에 참여하지 않는 것이 좋습니다.


답변

#include <boost/range/algorithm/count.hpp>

std::string str = "a_b_c";
int cnt = boost::count(str, '_');


답변

이름을 … Lambda version … 🙂

using namespace boost::lambda;

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

당신은 몇 가지 포함이 필요합니다 … 나는 당신을 운동으로 남겨두고 …


답변

람다 함수를 사용하여 문자가 “_”인지 확인하면 유효한 문자가 아닌 경우에만 카운트가 증가합니다.

std::string s = "a_b_c";
size_t count = std::count_if( s.begin(), s.end(), []( char c ){if(c =='_') return true; });
std::cout << "The count of numbers: " << count << std::endl;


답변

검색을위한 std :: string에는 여러 가지 방법이 있지만 find는 아마도 당신이 찾고있는 것입니다. C 스타일 문자열을 의미하는 경우 strchr입니다. 그러나 두 경우 모두 for 루프를 사용하여 각 문자를 확인할 수 있습니다. 루프는 본질적으로이 두 가지를 마무리합니다.

시작 위치가 주어진 다음 문자를 찾는 방법을 알고 나면 갈수록 계속해서 검색을 진행합니다 (예 : 루프 사용).