C++中字符串的查找与插入方式

 更新时间:2026年04月26日 10:40:18   作者:2601_95612197  
本文介绍了三种查找子字符串的方法,包括暴力匹配、使用函数和使用循环,同时,介绍了三种插入内容的方法,包括直接插入、使用substr截取和使用for循环逐个字符拼接,最后强调了这些方法仅为个人经验,希望能提供参考

一、字符串查找

在一个长字符串中找到需要从子串,可以用暴力匹配,从长串中第一个字符开始,一个个和字串对比,能完全对上就是找到了,对不上就循环加一。

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; 
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++特性之智能指针shared_ptr详解

    C++特性之智能指针shared_ptr详解

    shared_ptr是C++11提供的一种智能指针类,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。本文主要是来和大家聊聊shared_ptr的使用,需要的可以参考一下
    2022-12-12
  • C++冒泡排序及其优化算法

    C++冒泡排序及其优化算法

    这篇文章主要为大家介绍了C++冒泡排序及其优化算法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • C++模板基础之函数模板与类模板实例详解

    C++模板基础之函数模板与类模板实例详解

    C++ 除了支持函数模板,还支持类模板(Class Template),所以下面这篇文章主要给大家介绍了关于C++模板基础之函数模板与类模板的相关资料,需要的朋友可以参考下
    2021-06-06
  • C和C++中argc和argv的含义及用法详解

    C和C++中argc和argv的含义及用法详解

    argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,这篇文章主要介绍了C和C++中argc和argv的含义以及用法,需要的朋友可以参考下
    2022-11-11
  • Qt 中开启线程的多种方式小结

    Qt 中开启线程的多种方式小结

    本篇文章就来整理一下 Qt 中使用线程的五种方式,方便后期回顾。前面两种比较简单,一笔带过了,主要介绍后面三种,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • C++之std命名空间

    C++之std命名空间

    这篇文章主要介绍了C++之std命名空间使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 算法之排列算法与组合算法详解

    算法之排列算法与组合算法详解

    这篇文章主要介绍了算法之排列算法与组合算法详解,本文以字典序法、递归法为例讲解了排列算法、全组合算法等,需要的朋友可以参考下
    2014-08-08
  • Qt中导航栏实现的详细指南

    Qt中导航栏实现的详细指南

    在现代的图形用户界面中,工具栏是提供快速访问常用功能和命令的重要组件,本文主要介绍了Qt中导航栏实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • c语言中十六进制转二进制显示的实现方法

    c语言中十六进制转二进制显示的实现方法

    本篇文章对c语言中十六进制转二进制显示的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现Dijkstra算法的示例代码

    C++实现Dijkstra算法的示例代码

    迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法。本文将用C++实现Dijkstra算法,需要的可以参考一下
    2022-07-07

最新评论