আমি কীভাবে "_"
একটি স্ট্রিংয়ের মধ্যে সংখ্যাটি গণনা করতে পারি "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
সম্পাদনা: সি ++ উদাহরণ কোড:
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)
এছাড়াও নোট করুন: আমি বুঝতে পারি যে আপনি "যতটা সম্ভব ছোট" কিছু চান, তবে আমি আপনাকে এই সমাধানটি পরিবর্তে ব্যবহার করার পরামর্শ দিই। আপনি দেখতে পাচ্ছেন যে কোডটি আপনার জন্য encapsulate করতে আপনি একটি ফাংশন ব্যবহার করতে পারেন যাতে আপনাকে for
প্রতিবার লুপটি লিখতে হবে না , তবে কেবল count_underscores("my_string_")
আপনার বাকী কোডটি ব্যবহার করতে পারে । উন্নত সি ++ অ্যালগরিদম ব্যবহার এখানে অবশ্যই সম্ভব, তবে আমি মনে করি এটি ওভারকিল।
উপযুক্ত নামযুক্ত ভেরিয়েবলগুলির সাথে পুরানো ফ্যাশনযুক্ত সমাধান। এটি কোড কিছু আত্মা দেয়।
#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 বছর পরে, এই উত্তরটির দিকে তাকিয়ে আমি লজ্জা পেয়েছি আমি এটি করেছিলাম (যদিও আমি স্বল্প-প্রচেষ্টা সংক্রান্ত প্রশ্নের কাছে নিজেকে স্পর্শকাতর পোকার হিসাবে ন্যায্যতা দিয়েছি)। এটি বিষাক্ত এবং ঠিক নেই। আমি পোস্টটি সরাচ্ছি না; স্ট্যাকওভারফ্লোতে বায়ুমণ্ডল পরিবর্তন করতে আমি এই ক্ষমা প্রার্থনা করছি। সুতরাং ওপি: আমি ক্ষমাপ্রার্থী এবং আমি আশা করি আমার ট্রোলিং সত্ত্বেও আপনি ঠিক আপনার বাড়ির কাজটি পেয়েছেন এবং আমার মতো উত্তরগুলি আপনাকে সাইটে অংশ নেওয়া থেকে নিরুৎসাহিত করে না।
#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;
অনুসন্ধানের জন্য std :: স্ট্রিংয়ের বেশ কয়েকটি পদ্ধতি রয়েছে তবে সম্ভবত আপনি যা খুঁজছেন তা সন্ধান করুন। আপনি যদি কোনও সি-স্টাইলের স্ট্রিং বোঝাতে চান তবে তার সমতুল্য strchr। যাইহোক, উভয় ক্ষেত্রেই আপনি লুপের জন্য একটি ব্যবহার করতে পারেন এবং প্রতিটি অক্ষরও পরীক্ষা করতে পারেন — লুপটি এই দুইটি মোড়ানোর জন্য প্রয়োজনীয়।
একবার আপনি যখন জানতে পারবেন যে কীভাবে পরবর্তী অক্ষরটিকে একটি শুরুর অবস্থান দেওয়া হয়, আপনি ক্রমাগত আপনার অনুসন্ধানকে এগিয়ে যান (অর্থাত একটি লুপ ব্যবহার করুন), গমন করার সাথে সাথে আপনি গণনা করছেন।
একটি স্ট্রিং মধ্যে অক্ষর উপস্থিতি গণনা সহজ:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
আপনি স্ট্রিং ফাংশন ব্যবহার করে উত্স স্ট্রিংয়ে '_' এর উপস্থিতি খুঁজে পেতে পারেন। ফাইন্ড () ফাংশনটি 2 টি আর্গুমেন্ট গ্রহণ করে, প্রথম - স্ট্রিং যার উপস্থিতিগুলি আমরা সন্ধান করতে চাই এবং দ্বিতীয় যুক্তি শুরুর অবস্থান নেয় sourceউইস লুপটি উত্সের স্ট্রিংয়ের সমাপ্তি অবধি উপস্থিতি সন্ধান করতে ব্যবহৃত হয়।
উদাহরণ:
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]);
}
}