16人参与 • 2026-04-26 • C/C++
在一个长字符串中找到需要从子串,可以用暴力匹配,从长串中第一个字符开始,一个个和字串对比,能完全对上就是找到了,对不上就循环加一。
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;
}
}
} #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)整行读取字符串包括空格
在指定位置加内容,把原字符串在指定位置拆成两个部分,前部分加上插入内容再加上后半部分。
#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;
}#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;
}以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论