C++如何从String的指定位置搜索一个子串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++如何从String的指定位置搜索一个子串?相关的知识,希望对你有一定的参考价值。

比如有字串:
string a="0AA00AA00";
我想从3个字节开始搜索“AA”,请问应该怎么写代码呢?

可以用find()函数,具体的语法如下所示:
(1) size_type find(E c, size_type pos = npos) const;用来查找单个字符在字符串中出现的位置并返回位置基于0的索引值。
(2) size_type find(const E *s, size_type pos = npos) const;用来查找以空字符结尾的字符数组在字符串中出现的位置并返回该位置基于0索引值。
(3) size_type find(const E *s, size_type pos, size_type n = npos) const;用来查找以空字符结尾的字符数组在字符串中出现的位置并返回该位置基于0索引值,它是从npos开始查找的。
(4) size_type find(const basic_string &str, size_type pos = npos) const;用来查找字符串并且返回该搜索的字符串的基于0索引值的位置值,它是从npos开始查找的。
参考技术A #include<iostream>
#include<string>
using namespace std;
void main()

string a="0AA00AA00";
char str[]="AA";
int pos=a.find(str,2);
cout<<pos<<endl;
本回答被提问者和网友采纳
参考技术B #include<iostream>
#include<string>
using namespace std;
void main()

int pos=1;
string a="0AA00AA00";
char str[]="AA";
while(1)

pos=a.find(str,pos+1);
if(pos==-1)break;
cout<<pos<<endl;

system("pause");

参考技术C for(size_t i = 0; i != a.size(); i++)

if(a[i] == 'A' && a[i+1] == 'A')
cout << "a[" << i << "]" << " and "
<< "a[" << i+1 << "]" << " are AA" << endl;

求子串在母串中出现的次数(C++)

问题描述:

求一个子串在母串中出现的次数。

(1)思路:

1.用一个外循环,来遍历母串。
2.指定两个指针p、q分别指向子串的首地址和母串的首地址;
3.如果*p==q,则 p++;q++;
否则
母串首地址向后移动一个位置;
用break跳出比较内循环;

4.判断
q==‘\\0’,如果是则:计数器++
5.跳出外循环

(2)详细代码:

//C++

#include<conio.h>
#include<string.h>
#include<iostream>
#define M 81
using namespace std;
//fun()函数,ss代表母串,s代表子串.
int fun(char *ss,char *s)
	int count=0;
	char *p,*q;
	while(*ss!='\\0')
		p=ss;                 //p指向ss首地址
		q=s;                  //q指向s首地址
		while(*s!='\\0')
			if(*p==*q)
				p++;
				q++;
			else 
				ss++;        //此处需注意,当字符比较不相等时,则需要将ss的地址向后移动一个。
				break;
			
		
		if(*q=='\\0')
			count++;
		
	
	
	return count;

int main()
	char a[M],s[M];
	gets(a);
	gets(s);
	int n=fun(a,s);
	cout<<n<<endl;
	return 0;

(3)注:

1.gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以“回车”标志读取结束。

2.fun(*ss,*s)的第二种写法(参考):

int fun(char *ss, char *s) 
	int i, j, k, count= 0;
	for(i = 0; ss[i] != '\\0'; i++)
		for(j = i, k = 0; s[k] == ss[j]  &&  s[j] != '\\0' ;  k++,j++ )       
			if(substr[k+1] == '\\0')                        //s中的每一个字符拿去比较,此时意思是已经比较到s的最后一个字符(因为最后一个字符的后一个是'\\0')
				num++;
			
		
	
	return count;

(4)结果验证:

以上是关于C++如何从String的指定位置搜索一个子串?的主要内容,如果未能解决你的问题,请参考以下文章

nowcoder-练习赛16

asp中如何判断一个字符串中是不是含有一个子字符串?

如何用MYSQL函数删除字符串最后几个字符

C++中搜索截取字符串

求子串在母串中出现的次数(C++)

delphi调用dll函数 字符串参数