如何计算类似于"bla_bla_blabla_bla"
这样的字符串中"_"
出现的次数?
如何计算类似于"bla_bla_blabla_bla"
这样的字符串中"_"
出现的次数?
#include <algorithm>
std::string s = "a_b_c";
std::string::difference_type n = std::count(s.begin(), s.end(), '_');
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;
}
strlen
并扫描整个字符串,使得实现变为二次方。为了避免这种情况,需要缓存字符串的长度。 - Sergey Shevchenko使用名称恰当的旧式解决方案。这使得代码有些灵性。
#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:我道歉,并希望你在我的恶作剧之下能正确完成你的作业,而像我这样的答案没有让你放弃在该网站上参与。
使用 lambda 函数来检查字符是否为“_”,如果是,则仅增加计数,否则不是有效字符
std::string s = "a_b_c";
size_t count = std::count_if( s.begin(), s.end(), []( char c ){return c =='_';});
std::cout << "The count of numbers: " << count << std::endl;
return false
语句:size_t count = std::count_if( s.begin(), s.end(), []( char c ){if(c =='_') return true; else return false; });
- Zbyšek Zapadlíksize_t count = std::count_if( s.begin(), s.end(), []( char c ){ return c == '_'; });
- JoJo Brandon Coffman#include <boost/range/algorithm/count.hpp>
std::string str = "a_b_c";
int cnt = boost::count(str, '_');
在字符串中统计字符出现次数很容易:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="Sakib Hossain";
int cou=count(s.begin(),s.end(),'a');
cout<<cou;
}
using namespace boost::lambda;
std::string s = "a_b_c";
std::cout << std::count_if (s.begin(), s.end(), _1 == '_') << std::endl;
std::count
已经可以满足所有需求? - 463035818_is_not_a_number我会这样做:
#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;
}
std::string有几种搜索方法,但find可能是您要查找的内容。如果您指的是C风格字符串,则相当于strchr。但是,在任何一种情况下,您也可以使用for循环并检查每个字符-循环本质上就是这两个方法包装起来的。
一旦您知道如何在给定起始位置查找下一个字符,您将不断推进搜索(即使用循环),并随着前进计数。
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();
}
std::count
返回类型为iterator_traits<InputIt>::difference_type
,对于大多数标准容器来说,这是std::ptrdiff_t
,而不是std::size_t
。 - Daniel Stevensstd :: count
返回值所保存的变量应该是std :: string :: difference_type
类型以获取最大的正确性。我提交了一个编辑答案的请求:std :: string :: difference_type n = std :: count(s.begin(),s.end(),'_');
- FriskySagaauto
的好例子。 ;) - Daniel Stevens/usr/include/c++/9/bits/predefined_ops.h:241:17: 错误:ISO C++禁止指针和整数之间的比较[-fpermissive] 241 | { return *__it == _M_value; } | ~~~~~~^~~~~~~~~~~
- Raleigh L.