社区
C++ 语言
帖子详情
怎么查找一个string 字符串中的子字符串出现的次数和位置?
NewCenturyNewPage
2004-10-14 10:15:01
已知:string s="HelloABCmyc++ABCOKC++ABC";
现在要查找该字符串s的子字符串ABC出现的次数和位置,怎么查找最简捷?
...全文
4656
13
打赏
收藏
怎么查找一个string 字符串中的子字符串出现的次数和位置?
已知:string s="HelloABCmyc++ABCOKC++ABC"; 现在要查找该字符串s的子字符串ABC出现的次数和位置,怎么查找最简捷?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
NewCenturyNewPage
2004-10-14
打赏
举报
回复
demo001(给分是我最大的快乐)
----------------------------
是的,是3个,我看错了,上面已经说了,呵呵。
demo001
2004-10-14
打赏
举报
回复
sh: Pause: command not found
是Unix下不支持Pause屏幕输出命令
demo001
2004-10-14
打赏
举报
回复
最后的3是总个数啊
楼主
你不看我程序的啊?
whoho
2004-10-14
打赏
举报
回复
不会的
string::find的效率很高,你可以尝试去看它代码
如果你使用的stl版本比较次,可以去看SGI的代码
在这个基础上,你统计次数的效率,几乎无可挑剔了
不管如何实现计数,至少将整个串前前后后匹配一遍都是必须的
find实现了无回溯匹配,所以效率自然不会差
你上面的代码有问题,你去看看msdn,string::find有多种版本
你去找提供带offset参数的版本,这样就不用求子串了
NewCenturyNewPage
2004-10-14
打赏
举报
回复
whoho(在北方流浪)
我只知道用find的时候每次要对字符串求子串substr,这样是不是效率不高?
i = s.find("ABC");
while(i>0)
{
s= s.substr(i,s.length()-i);
n++;
i = s.find("ABC");
}
whoho
2004-10-14
打赏
举报
回复
对子串好像也有一个相应的重载版本,查一下就知道了
或者,你可以用string::find,每次提供一个不同的offset即可
NewCenturyNewPage
2004-10-14
打赏
举报
回复
呵呵,看错了,不好意思,sorry,你最后的一个打印出来的是出现的次数。
结贴!
whoho
2004-10-14
打赏
举报
回复
标准库中有一个count算法:
string str = "aaaddea";
cout << count(str.begin(), str.end(), 'a') << "a's";
NewCenturyNewPage
2004-10-14
打赏
举报
回复
demo001(给分是我最大的快乐)
不对哦,运行结果:
5
13
21
3
sh: Pause: command not found
最后怎么多了一个3?
demo001
2004-10-14
打赏
举报
回复
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int intCount=0;
unsigned int loc=0;
string s="HelloABCmyc++ABCOKC++ABC";
while((loc=s.find( "ABC", loc ))!=string::npos)
{
intCount++;
cout << loc++ << endl;
}
cout << intCount << endl;
system("Pause");
return 0;
}
wxwxiaofeng
2004-10-14
打赏
举报
回复
用strstr()可以判断字符串中是否有指定的字符串
NewCenturyNewPage
2004-10-14
打赏
举报
回复
while(s.rfind("ABC")>0)
nCount++;
kobefly
2004-10-14
打赏
举报
回复
没有直接实现你所要求功能的函数
要自己写
查找的话
KMP算法
可以考虑
Note-Station-to-markdown
这是
一个
跨平台脚本,可将 Synology Note Station 的笔记转换为 Markdown 文件。脚本使用 Python 编写,可在任何桌面平台上运行。 转换后您将获得: 1、以导出的笔记本命名的文件夹; 2、这些文件夹
中
以所有内联图片原位存储的 Markdown 语法纯文本文件笔记; 3、在笔记文本开头处分配标签和附件链接; 4、所有图片和附加文件都位于笔记本目录下的媒体
子
目录
中
。
区县-专精特新企业数量(2013-2025年).xlsx
详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/162965929
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章