Wie kann ich die Anzahl "_"
in einer Zeichenfolge wie zählen "bla_bla_blabla_bla"
?
Wie kann ich die Anzahl "_"
in einer Zeichenfolge wie zählen "bla_bla_blabla_bla"
?
Antworten:
#include <algorithm>
std::string s = "a_b_c";
size_t n = std::count(s.begin(), s.end(), '_');
std::count
zurückkehrt Typ iterator_traits<InputIt>::difference_type
, die für die meisten Standard - Container ist std::ptrdiff_t
, nicht std::size_t
.
Pseudocode:
count = 0
For each character c in string s
Check if c equals '_'
If yes, increase count
EDIT: C ++ Beispielcode:
int count_underscores(string s) {
int count = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] == '_') count++;
return count;
}
Beachten Sie, dass dieser Code gemeinsam zu verwenden , um mit std::string
, wenn Sie verwenden char*
, ersetzen Sie s.size()
mit strlen(s)
.
Beachten Sie auch: Ich kann verstehen, dass Sie etwas "so klein wie möglich" wollen, aber ich würde Ihnen empfehlen, stattdessen diese Lösung zu verwenden. Wie Sie sehen, können Sie den Code mithilfe einer Funktion für Sie kapseln, sodass Sie die for
Schleife nicht jedes Mal ausschreiben müssen, sondern nur count_underscores("my_string_")
den Rest Ihres Codes verwenden können. Die Verwendung fortgeschrittener C ++ - Algorithmen ist hier sicherlich möglich, aber ich denke, es ist übertrieben.
Altmodische Lösung mit entsprechend benannten Variablen. Dies gibt dem Code etwas Geist.
#include <cstdio>
int _(char*__){int ___=0;while(*__)___='_'==*__++?___+1:___;return ___;}int main(){char*__="_la_blba_bla__bla___";printf("The string \"%s\" contains %d _ characters\n",__,_(__));}
Bearbeiten: Ungefähr 8 Jahre später, als ich mir diese Antwort anschaue, schäme ich mich, dass ich das getan habe (obwohl ich es mir selbst als snarky stupsen bei einer Frage mit geringem Aufwand gerechtfertigt habe). Das ist giftig und nicht in Ordnung. Ich entferne den Beitrag nicht. Ich füge diese Entschuldigung hinzu, um die Atmosphäre in StackOverflow zu verändern. Also OP: Ich entschuldige mich und hoffe, dass Sie trotz meines Trolling Ihre Hausaufgaben richtig gemacht haben und dass Antworten wie meine Sie nicht davon abgehalten haben, an der Website teilzunehmen.
#include <boost/range/algorithm/count.hpp>
std::string str = "a_b_c";
int cnt = boost::count(str, '_');
Sie nennen es ... Lambda-Version ... :)
using namespace boost::lambda;
std::string s = "a_b_c";
std::cout << std::count_if (s.begin(), s.end(), _1 == '_') << std::endl;
Du brauchst mehrere Includes ... das überlasse ich dir als Übung ...
Wenn Sie die Lambda-Funktion verwenden, um zu überprüfen, ob das Zeichen "_" ist, wird nur die Anzahl erhöht, andernfalls wird kein gültiges Zeichen verwendet
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;
Es gibt verschiedene Methoden von std :: string für die Suche, aber find ist wahrscheinlich das, wonach Sie suchen. Wenn Sie eine Zeichenfolge im C-Stil meinen, ist das Äquivalent strchr. In beiden Fällen können Sie jedoch auch eine for-Schleife verwenden und jedes Zeichen überprüfen. Die Schleife ist im Wesentlichen das, was diese beiden zusammenfassen.
Sobald Sie wissen, wie Sie das nächste Zeichen an einer Startposition finden, setzen Sie Ihre Suche fort (dh verwenden Sie eine Schleife) und zählen dabei.
Das Zählen von Zeichen in einer Zeichenfolge ist einfach:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
Sie können das Auftreten von '_' in der Quellzeichenfolge mithilfe von Zeichenfolgenfunktionen ermitteln. Die Funktion find () verwendet zwei Argumente: den ersten String, dessen Vorkommen wir herausfinden möchten, und das zweite Argument die Startposition. Während der Schleife wird das Vorkommen bis zum Ende des Quellstrings ermittelt.
Beispiel:
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();
}
Ich hätte es so gemacht:
#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;
}
Ich hätte so etwas gemacht :)
const char* str = "bla_bla_blabla_bla";
char* p = str;
unsigned int count = 0;
while (*p != '\0')
if (*p++ == '_')
count++;
Versuchen
#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]);
}
}