一、字符串查找
在一个长字符串中找到需要从子串,可以用暴力匹配,从长串中第一个字符开始,一个个和字串对比,能完全对上就是找到了,对不上就循环加一。
1、用函数加循环查找
int findsub(const string &s,const string &sub){
int n=s.size(),m=sub.size();
if(m>n)
return -1;
for(int i=0;i<=n-m;i++){
int j=0;
while(j<m&&s[i+j]==sub[j]){
j++;
}
if(j==m){
return i;
}
}
} 2、用string中自带的find()
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,sub;//s是主串,sub是要查找的子串
cin>>s>>sub;
size_t pos=s.find(sub);//调用string中自带的find(),会查找出子串第一次出现的位置,返回值类型是size_t(无符号整数,专门用来存下标或长度)
if(pos!=string::npos){//string::npos是定义的常量,表示没找到
cout<<pos<<endl;//找到输出下标
}
else{
cout<<-1<<endl;//没找到输出-1
}
return 0;
}可以用getlin(cin,s)整行读取字符串包括空格
二、字符串插入
在指定位置加内容,把原字符串在指定位置拆成两个部分,前部分加上插入内容再加上后半部分。
1、用substr把字符串截取字串,拼接起来
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;//原字符串
string ins;//要插入的字符串
int pos=2;//在下标为二的位置上插入新的字符
cin>>s>>ins;
string res=s.substr(0,pos)+ins+s.substr(pos);//substr从字符串中截取子串,s.substr(起始位置,截取长度),s.substr(起始位置),不写长度默认到最后
cout<<res;
return 0;
}2、用for循环,逐个字符拼接
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;//原字符串
string ins;//要插入的字符串
int pos=2;//在下标为二的位置上插入新的字符
cin>>s>>ins;
string str;
for(int i=0;i<pos;i++){
str=str+s[i];
}//原字符前半部分:0~pos-1
for(int i=0;i<ins.size();i++){
str=str+ins[i];
}//插入的内容
for(int i=pos;i<s.size();i++){
str=str+s[i];
}//原字符串后半部分:pos~结束
cout<<str;
return 0;
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论