मैं "_"
एक स्ट्रिंग की संख्या कैसे गिन सकता हूं "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 साल बाद, इस जवाब को देखकर मुझे शर्म आ रही है कि मैंने ऐसा किया (भले ही मैंने इसे कम प्रयास वाले सवाल के रूप में अपने आप को एक झूठा प्रहार के रूप में सही ठहराया)। यह विषाक्त है और ठीक नहीं है। मैं पद नहीं हटा रहा हूं; मैं StackOverflow पर वातावरण को बदलने में मदद करने के लिए इस माफी को जोड़ रहा हूं। इसलिए ओपी: मैं माफी मांगता हूं और मुझे आशा है कि मेरे ट्रोलिंग के बावजूद आपको अपना होमवर्क सही मिला और मेरे जैसे जवाबों ने आपको साइट पर भाग लेने से हतोत्साहित नहीं किया।
#include <boost/range/algorithm/count.hpp>
std::string str = "a_b_c";
int cnt = boost::count(str, '_');
आप इसे नाम दें ... लैम्ब्डा संस्करण ... :)
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 की कई विधियाँ हैं, लेकिन संभवतः वह है जो आप खोज रहे हैं। यदि आपका मतलब सी-स्टाइल स्ट्रिंग है, तो समतुल्य स्ट्रैच है। हालाँकि, किसी भी मामले में, आप लूप के लिए भी उपयोग कर सकते हैं और प्रत्येक वर्ण की जांच कर सकते हैं - लूप अनिवार्य रूप से ये दोनों लपेटते हैं।
एक बार जब आप यह जान लेते हैं कि आरंभिक स्थिति में दिए गए अगले चरित्र को कैसे पाया जाए, तो आप अपनी खोज को लगातार आगे बढ़ाते हैं (जैसे कि लूप का उपयोग करें), आप जाते ही गिनती।
एक स्ट्रिंग में वर्ण वर्ण घटाना आसान है:
#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;
}
मैंने ऐसा कुछ किया होगा :)
const char* str = "bla_bla_blabla_bla";
char* p = str;
unsigned int count = 0;
while (*p != '\0')
if (*p++ == '_')
count++;
प्रयत्न
#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]);
}
}