2014-02-19 2 views
0

코드가 있습니다. "code", "cope", "coze", "cole"또는 "core"를 찾을 때마다 카운트 수에 대한 출력을 제공합니다. 예를 들어 : countCode ("aaacodebbb")는 1 일, 그러나 당신이 선택하면 0substr에 대한 오류 출력

int countCode(const string& inStr) { 
    int count = 0; 
    for (unsigned i = 0; i < inStr.length(); i++) { 
     if (inStr.substr(i,i+3) == "code" || inStr.substr(i,i+3) == "coze" || inStr.substr(i,i+3) == "cope" || inStr.substr(i,i+3) == "core" || inStr.substr(i,i+3) == "cole") { 
      count++; 
     } 
    } 
    return count; 
} 
+0

inStr.substr (i, i + 3)'인쇄를 시도 했습니까 (디버거에서 검사 했습니까?)? – John3136

답변

2
string substr (size_t pos = 0, size_t len = npos) const; 

를 사용한다 . 대신 inStr.substr(i,4)을 사용해야합니다. 또한

, 당신은 문자열에 남아 미만 네 개의 문자가있을 때 네 문자열이 발생하지 수 알고 , 그래서 당신은 같은 뭔가가 더 논리적 (효율적인 가능성이 수렁) 할 수 있습니다 :

int countCode (const string& inStr) { 
    int count = 0; 
    size_t len = inStr.length(); 
    if (len >= 4) { 
     for (size_t i = 0; i <= len - 4; i++) { 
      if (inStr.substr(i,4) == "code" || ...) { 
       count++; 
      } 
     } 
    } 
} 

또한 문자열의 크기와 위치를 처리하기위한 자연 형이다 size_t의 사용을주의.

2

을 발견해야한다 예를 들어, this substr reference 두 번째 인수는 끝 위치가 아닌 하위 문자열의 길이임을 알 수 있습니다.

2

substr()의 두 번째 매개 변수는 끝 위치가 아니라 카운트입니다.

basic_string substr(size_type pos = 0, 
       size_type count = npos) const; 

매개 변수 의미

pos  - position of the first character to include 
    count - length of the substring 
    ^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^ 

, 당신은 길이하지 마지막 문자 위치로 두 번째 인수가 의미하는지

inStr.substr(i,4)