"_"
のような文字列で"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のメソッドがありますが、findはおそらくあなたが探しているものです。あなたがCスタイルの文字列を意味しているなら、それと同等のものはstrchrです。ただし、どちらの場合も、forループを使用して各文字をチェックすることができます。ループは本質的にこれら2つをまとめたものです。
開始位置を指定して次の文字を見つける方法がわかったら、進むにつれてカウントを続けながら検索を進めます(つまり、ループを使用します)。
文字列内の文字の出現回数を数えるのは簡単です。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
ラムダ関数を使用して文字をチェックすると "_"になり、countだけがインクリメントされます。それ以外の場合は有効な文字ではありません。
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;
文字列関数を使用して、ソース文字列内の '_'の出現を見つけることができます。 find()関数は2つの引数を取ります。最初の文字列は出現を見つけたい文字列、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;
}
私はそのようなことをしただろう:)
const char* str = "bla_bla_blabla_bla";
char* p = str;
unsigned int count = 0;
while (*p != '\0')
if (*p++ == '_')
count++;