新知识
例1.字符串查找
有s1和s2两个字符串,假设s1="abdabca",s2="abc"。请编写程序,查找s1字符串中是否包含有s2字符串。
01.C语言字符串查找函数
在C语言里面有一个叫strstr函数,专门负责字符串查找处理。
char s1[]="abdabca";
char s2[]="abc";
char* ret = strstr(s1,s2);
if(ret==NULL)
cout<<"不包含"<<endl;
else
cout<<"包含"<<endl;
大家尝试把第9行代码替换成cout<<ret;看看程序会输出什么结果。
02.C++语言字符串查找函数
在C++里是用string类型来存储字符串的,而string本身就自带有常有的字符串操作命令。
string s1="abdabca";
string s2="abc";
int idx = s1.find(s2,0);
if(idx<s1.size())
cout<<"包含"<<endl;
else
cout<<"不包含"<<endl;
find函数中第2个参数0,代表从s1的第0个元素开始查找;find函数的返回值是s2在s1的起始位置。大家可尝试把第7和第9行代码替换成cout<<idx;。看看会输出什么结果。
例2.字符串统计
有s1和s2两个字符串,假设s1="abdabcaabc",s2="abc"。请编写程序,统计s1字符串中有多少个s2字符串。我们先看下图。
次数 | a | b | d | a | b | c | a | a | b | c |
1 | a | b | c | | | | | | | |
2 | | a | b | c | | | | | | |
3 | | | a | b | c | | | | | |
4 | | | | a | b | c | | | | |
5 | | | | | | | a | b | c | |
6 | | | | | | | | a | b | c |
从上图,大家可以看到统计字串次数的流程了。下面我们直接用C++来实现这个程序。
string s1="aabcdabca";
string s2="abc";
int pos=0;
int n=0;
while(pos<(s1.size()-s2.size())){
if(s1.find(s2,pos)<s1.size()){
n+=1;
pos+=s2.size();
}
else
pos+=1;
}
cout<<n;
思考一下:如果s1="abcaaabdaaaa",s2="aa";。程序会出现什么结果?
课后练习
请尝试用C语言改写例2程序。