ฉันจะนับจำนวน"_"
ในสตริงได้"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
pseudocode:
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 ดังนั้น OP: ฉันขอโทษและฉันหวังว่าคุณจะได้รับการบ้านของคุณแม้จะมีการหลอกและคำตอบที่ฉันชอบไม่ได้กีดกันคุณจากการเข้าร่วมในเว็บไซต์
#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 สำหรับการค้นหา แต่ find อาจเป็นสิ่งที่คุณกำลังมองหา หากคุณหมายถึงสตริงแบบ C ค่าที่เทียบเท่าคือ strchr อย่างไรก็ตามในกรณีใดกรณีหนึ่งคุณยังสามารถใช้ for for loop และตรวจสอบอักขระแต่ละตัว - loop นั้นเป็นสิ่งที่ทั้งสองสรุปไว้
เมื่อคุณรู้วิธีค้นหาตัวละครตัวต่อไปที่ได้รับตำแหน่งเริ่มต้นคุณจะต้องค้นหาต่อไปอย่างต่อเนื่อง (เช่นใช้วง) นับตามที่คุณไป
นับจำนวนตัวอักษรในสตริงเป็นเรื่องง่าย:
#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]);
}
}