"_"
문자열 의 수를 어떻게 계산 "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(), '_');
std::count
반환 유형 iterator_traits<InputIt>::difference_type
은 대부분의 표준 컨테이너가 std::ptrdiff_t
아닙니다 std::size_t
.
의사 코드 :
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;
[]( char c ){if(c =='_') return true; }
모든 코드 경로에서 값을 반환하지 않았기 때문에 정의되지 않은 동작을 호출합니다
검색을위한 std :: string에는 여러 가지 방법이 있지만 find는 아마도 당신이 찾고있는 것입니다. C 스타일 문자열을 의미하는 경우 strchr입니다. 그러나 두 경우 모두 for 루프를 사용하여 각 문자를 확인할 수 있습니다. 루프는 본질적으로이 두 가지를 마무리합니다.
시작 위치가 주어진 다음 문자를 찾는 방법을 알고 나면 갈수록 계속해서 검색을 진행합니다 (예 : 루프 사용).
문자열에서 문자 발생 횟수를 쉽게 계산할 수 있습니다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
문자열 함수를 사용하여 소스 문자열에서 '_'의 발생을 찾을 수 있습니다. find () 함수는 2 개의 인수를 취합니다. 첫 번째 문자열은 어커런스를 찾고, 두 번째 인수는 시작 위치를 취합니다. 루프는 소스 문자열의 끝까지 어커런스를 찾는 데 사용됩니다.
예:
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++)
{
if (s.at(i) == '_')
count++;
}
cout << endl << count;
cin.ignore();
return 0;
}
시험
#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;
}
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]);
}
}