Bagaimana saya bisa menghitung jumlah "_"
dalam string "bla_bla_blabla_bla"
?
Bagaimana saya bisa menghitung jumlah "_"
dalam string "bla_bla_blabla_bla"
?
Jawaban:
#include <algorithm>
std::string s = "a_b_c";
size_t n = std::count(s.begin(), s.end(), '_');
std::count
jenis hasil iterator_traits<InputIt>::difference_type
, yang untuk sebagian besar kontainer standar std::ptrdiff_t
, tidak std::size_t
.
Kodesemu:
count = 0
For each character c in string s
Check if c equals '_'
If yes, increase count
EDIT: C ++ contoh kode:
int count_underscores(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == '_') count++;
return count;
}
Perhatikan bahwa ini adalah kode untuk digunakan bersama std::string
, jika Anda menggunakan char*
, ganti s.size()
denganstrlen(s)
.
Juga perhatikan: Saya bisa mengerti Anda menginginkan sesuatu "sekecil mungkin", tetapi saya sarankan Anda untuk menggunakan solusi ini sebagai gantinya. Seperti yang Anda lihat, Anda dapat menggunakan fungsi untuk merangkum kode untuk Anda sehingga Anda tidak perlu menulis for
loop setiap kali, tetapi hanya dapat digunakan count_underscores("my_string_")
di sisa kode Anda. Menggunakan algoritma C ++ yang canggih tentu mungkin di sini, tapi saya pikir itu berlebihan.
Solusi kuno dengan variabel bernama tepat. Ini memberi kode semangat.
#include <cstdio>
int _(char*__){int ___=0;while(*__)___='_'==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string \"%s\" contains %d _ characters\n",__,_(__));}
Sunting: sekitar 8 tahun kemudian, melihat jawaban ini saya malu saya melakukan ini (meskipun saya membenarkannya sendiri sebagai sodokan pada pertanyaan usaha rendah). Ini beracun dan tidak OK. Saya tidak menghapus pos; Saya menambahkan permintaan maaf ini untuk membantu mengubah atmosfer di StackOverflow. Jadi OP: Saya minta maaf dan saya harap Anda mendapatkan pekerjaan rumah Anda dengan benar terlepas dari trolling saya dan jawaban seperti milik saya tidak membuat Anda enggan berpartisipasi di situs.
#include <boost/range/algorithm/count.hpp>
std::string str = "a_b_c";
int cnt = boost::count(str, '_');
Sebut saja ... versi Lambda ... :)
using namespace boost::lambda;
std::string s = "a_b_c";
std::cout << std::count_if (s.begin(), s.end(), _1 == '_') << std::endl;
Anda perlu beberapa termasuk ... Saya meninggalkan Anda itu sebagai latihan ...
Menggunakan fungsi lambda untuk memeriksa karakter adalah "_" maka hanya jumlah yang akan bertambah jika bukan karakter yang valid
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; }
memanggil perilaku yang tidak terdefinisi karena Anda tidak mengembalikan nilai di semua jalur kode
Ada beberapa metode std :: string untuk pencarian, tetapi menemukan mungkin adalah yang Anda cari. Jika yang Anda maksud adalah string gaya-C, maka padanannya adalah strchr. Namun, dalam kedua kasus tersebut, Anda juga dapat menggunakan loop for dan memeriksa setiap karakter — loop pada dasarnya adalah apa yang mereka bungkus.
Setelah Anda tahu bagaimana menemukan karakter berikutnya yang diberi posisi awal, Anda terus memajukan pencarian Anda (yaitu menggunakan loop), menghitung saat Anda pergi.
Menghitung kemunculan karakter dalam string mudah:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
Anda dapat mengetahui kemunculan '_' dalam string sumber dengan menggunakan fungsi string. fungsi find () membutuhkan 2 argumen, string pertama yang kemunculannya ingin kita ketahui dan argumen kedua mengambil posisi awal. Sementara loop digunakan untuk mengetahui kejadian sampai akhir string sumber.
contoh:
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();
}
Saya akan melakukan ini:
#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;
}
Saya akan melakukan sesuatu seperti itu :)
const char* str = "bla_bla_blabla_bla";
char* p = str;
unsigned int count = 0;
while (*p != '\0')
if (*p++ == '_')
count++;
Mencoba
#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]);
}
}