首页 > 编程语言 >C++ STL String用法

C++ STL String用法

时间:2023-11-17 18:00:09浏览次数:43  
标签:index String STL cout pos C++ str 字符串 string

string

在 C 语言中,提供了字符串的操作,但只能通过字符数组的方式来实现字符串。

string 则是一个简单的类,使用简单,在 OI 竞赛中被广泛使用。

相较于其他 STL 容器,string 的常数可以算是非常优秀的,基本与字符数组不相上下。

string常用操作
  • 输出

    string s = "123";
    printf("%s", s.c_str());
    cout << s;
    
  • 获取长度

    • s.size()
    • s.length()

    复杂度为常数。

    printf("s的长度为 %d", s.size());
    printf("s的长度为 %d", s.length());
    
  • 拼接

    直接使用+进行拼接。

    复杂度为\(O(n)\)。

    string s1 = "ke";
    s1 += "daya";
    cout << s1 << endl;//输出kedaya
    
  • 截取子串

    • substr(pos, len) :返回从 pos 位置开始截取len 个字符组成的字符串(如果从 pos 开始的后缀长度不足 len 则截取到末尾)。
    • substr(pos) :返回从 pos 位置开始截取到末尾的字符串。

    复杂度为\(O(n)\)。

    string s = "kedaya";
    cout << s.substr(2, 2) << endl;//输出da
    cout << s.substr(4, 10) << endl;//输出ya
    cout << s.substr(2) << endl;//输出daya
    
  • 插入/删除字符串

    • insert(index,str):表示在 index 处插入字符串 str
    • erase(index,count) :函数将字符串 index 位置开始(含)的 count 个字符删除。
    • erase(index):删去 index 位置及以后的所有字符。

    复杂度为\(O(n)\)。

    string s = "AK NOIP", t = " IOI";
    s.erase(6, 1);
    cout << s << endl;//输出AK NOI
    s.erase(2);
    cout << s << endl;//输出AK
    s.insert(2, t);
    cout << s << endl;//输出AK IOI
    
  • 替换字符

    • replace(pos,count,str):从 pos 位置开始 count 个字符的子串替换为 str
    • replace(first,last,str):以 first 开始(含)、last 结束(不含)的子串替换为 str,其中 firstlast 均为迭代器

    复杂度为\(O(n)\)。

    string s = "ABI";
    s.replace(0, 2, "NO");
    cout << s << endl;//输出NOI
    s.replace(s.begin(), s.end() - 1, "I will ak NO");
    cout << s << endl;//输出I will ak NOI
    
  • 寻找字符串

    find(str),返回字符串str第一次出现的位置,如果没有出现,则返回 string::npos

    复杂度不及\(KMP\)算法。

    string s = "ke da ya da ya", t = "da", u = "noi";
    cout << s.find(t) << endl;//输出3
    if(s.find(u) == string::npos)
    {
    	cout << "No" << endl;//输出No
    }
    
模板题目

洛谷P5733自动修正

洛谷P1308统计单词数

标签:index,String,STL,cout,pos,C++,str,字符串,string
From: https://www.cnblogs.com/acwhr/p/17839402.html

相关文章

  • 【C++中cin在Qt输出终端无法手动输入问题解决办法(详细)】
    现象:在Qt中使用cin进行对一个变量z进行输入,然后在用cout对z进行输出,结果没有进行手动输入,程序自动凭空出现类似512,32759等一些数值输出。 解决办法:第一步:在Qt左侧项目栏,在.pro文件中添加一行代码CONFIG+=console 第二步:在项目--运行--勾选在终端中运行(Runinterminal) 配置......
  • C++笔记
    inline内联函数:内存膨胀,空间换时间,节省调用函数,给被调函数形参赋值以及自动回收内存的时间使用原则:内联函数内不要有循环,使用重复率较高,代码比较简单的函数使用内联函数引用(别名,解析引用符)int&dd=numdd与num共享同一段内存,定义引用必须赋初始值,引用的作用可以缩短名称......
  • 【C++】【图像处理】形态学处理(腐蚀、膨胀)算法解析(以.raw格式的图像为基础进行图像处
    1voiderosion(BYTE*image,intw,inth,BYTE*outImg)2{3intrept;4//腐蚀5memcpy(outImg,image,sizeof(BYTE)*w*h);//将读取的图像赋值给outImg,方便进行腐蚀操作67inti,j,m,n;8BYTEflag;9for(rept=0;rept......
  • C++ map容器
    由于我昨天做题遇到了map,但是自己对map的了解少之甚少,于是就去学了一下map我将map的总结发到了c*dn,请移步c++map容器简介......
  • C++调用Python3实战,和PyImport_ImportModule返回NULL问题解决
    LinuxC++调用Python3入门准备以下面的目录结构演示如何在LinuxC/C++调用python3。|--hello.py|--main.cpp|--CMakeLists.txt hello.py:python的脚本,里面有2个函数main.cpp:c++函数CMakeLists.txt:Cmake文件,生成makefilepython脚本示例python脚本hello.py内容如下,......
  • 基于pybind11实现C++程序中调用Python脚本增加C++程序扩展性
     文章目录前言一、pybind11与Python环境配置二、C++环境配置三、C++调用Python交互代码四、C++调用PythonDemo完整源码 前言Windows平台,在实际C++项目开发中,结合pybind11库,让python成为C++的脚本语言,可以大大提高C++程序的可扩展性,大大提高开发效率,特别......
  • C++通过pybind11调用Python 实现transpose
    在某些场合需要在C++实现类似numpy的numpy.transpose(a,axes)功能,但是很多库如NumCpp都没有提供这样的方法,只有二维矩阵的转置,没法进行多维矩阵任意维度的转换。比较简单的想法就是利用numpy现有的功能,在c++代码里面通过调用python来调用Numpy的transpose。直接调用Python提......
  • C++调用python踩坑记录
     目录0、参考文档及博客1、环境配置步骤2、C++调用python的方法代码框架:(同样来源于上面这篇博客,可用于测试环境配置成功与否)报错处理函数(1)处理方法一:PyErr_Print(2)处理方法二:PyErr_Fetch2.5、终极解决方案3、踩坑记录(1)python第三方库调用出错(2)python模块环......
  • C#调用C++动态库接口函数和回调函数方法 后续
    声明回调委托,C#的委托可以实现C#调用C++的回调,操作函数以后的回调//定义委托,CallingConvention.StdCall可以,CallingConvention.Cdecl不行,参考https://www.it1352.com/1792610.html//[UnmanagedFunctionPointer(CallingConvention.Cdecl)]//不需要要添加该句话,具体参考//htt......
  • C#调用C++动态库接口函数和回调函数方法
    这篇文章主要介绍了C#调用C++动态库接口函数和回调函数方法,通过C++端编写接口展开内容,文章介绍详细具有一定的参考价值,需要的小伙伴可以参考一下需求: 当前C已经写好了一个动态库,完成了产品开发需求,C#需要调用C编写的动态库DLL接口,开发出完整的软件,DLL动态库里包含了普通接口函......