简单介绍C++ string字符串的增删改查

c++ 提供的string类包含了若干实用的成员函数,大大方便了字符串的增加、删除、更改、查询等操作。

插入字符串

insert()函数可以在string字符串中置顶的位置插入另一个字符串,它的原型为:

string& insert (size_t pos, const string& str);
看这个插入的格式我们就能猜想到,pos表示要插入的下标;str表示要插入的字符串,它可以是string变量,也可以是C风格的字符串。

看下面的代码:

#include <iostream>
#include <string>
using namespace std;
void main(){
  string s1, s2, s3;
  s1 = s2 = "1234567890";
  s3 = "aaa";
  s1.insert(5, s3);
  cout << s1 << endl;
  s2.insert(5, "bbb");
  cout << s2 << endl;
 

  system("pause");
}
运行结果:

12345aaa67890
12345bbb67890
请按任意键继续. . .
insert()函数的第一个参数有越界的可能,如果越界,则会产生运行时异常。我恶魔你要捕获这个异常。

删除字符串

erase()函数可以删除string变量中的一个字符串,原型为:

string& erase (size_t pos = 0, size_t len = npos);
pos 表示要删除的子字符串的起始下标,len表示要删除子字符串的长度。如果不指明len的话,那么直接删除pos到字符串结束处的所有字符(此时len =str.length-pos)。

示例代码如下:

#include <iostream>
#include <string>
using namespace std;
void main(){
    string s1, s2, s3;
    s1 = s2 = s3 = "1234567890";
    s2.erase(5);
    s3.erase(5, 3);
    cout<< s1 <<endl;
    cout<< s2 <<endl;
    cout<< s3 <<endl;
     system("pause");
}
运行结果:

1234567890
12345
1234590
请按任意键继续. . .
在 pos 参数没有越界的情况下, len 参数也可能会导致要删除的子字符串越界。但实际上这种情况不会发生,erase() 函数会从以下两个值中取出最小的一个作为待删除子字符串的长度:

len的值
字符串长度减去 pos 的值。
简单的说,就是待删除字符串最多只能删除到字符串结尾。

提取字符串

substr()函数原型为:

string substr (size_t pos = 0, size_t len = npos) const;
pos为要提取的子字符串的起始下标,len为要提取的子字符串的长度。

#include <iostream>
#include <string>
using namespace std;
void  main(){
  string s1 = "first second third";
  string s2;
  s2 = s1.substr(6, 6);
  cout << s1 << endl;
  cout << s2 << endl;
  system("pause");
}
输出结果为:

first second third
second
请按任意键继续. . .
系统对 substr() 参数的处理和 erase() 类似:

如果 pos 越界,会抛出异常;
如果 len 越界,会提取从 pos 到字符串结尾处的所有字符。
字符串的查找

find()函数

find()函数用于string字符串中查找子字符串出现的位置,它的原型为:

size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
第一个参数的表示为待查找的子字符串,它可以是string变量,也可以是C风格的字符串,第二个参数表示开始查找的位置(下标);

/字符串查找替换
void main()
{
  string s1 = "apple google apple iphone";
  //从0开始查找"google"的位置
  int idx = s1.find("google", 0);
  cout << idx << endl;

  //统计apple出现的次数
  int idx_app = s1.find("apple",0);
  //npos大于任何有效下标的值
  int num = 0;
  while (idx_app != string::npos)
  {
    num++;
    cout << "找到的索引:" << idx_app << endl;
    idx_app+=5;
    idx_app = s1.find("apple", idx_app);
  }

  cout << num << endl;
  system("pause");
}
输出结果为:

6
找到的索引:0
找到的索引:13
2
请按任意键继续. . .
find函数最终返回的是子字符串 第一次出现在字符串的其实下标,如果没有查找到子字符串,那么会返回一个无穷大的值 4294967295。统计apple出现的次数。先查找第一次出现的位置,接着

和npos大于任何有效下标的值,来判断,while循环,每次加上自身的长度,最后统计出现的次数。。。

rfind()函数

rfind() 和 find() 很类似,同样是在字符串中查找子字符串,不同的是 find() 函数从第二个参数开始往后查找,而 rfind() 函数则最多查找到第二个参数处,如果到了第二个参数所指定的下标还没有找到子字符串,则返回一个无穷大值4294967295。

#include <iostream>
#include <string>
using namespace std;
void main(){
  string s1 = "first second third";
  string s2 = "second";
  int index = s1.rfind(s2, 6);
  if (index < s1.length())
    cout << "Found at index : " << index << endl;
  else
    cout << "Not found" << endl;
 
  system("pause");
}
运行的结果为:

Found at index : 6
请按任意键继续. . .
find_first_of() 函数

find_first_of() 函数用于查找子字符串和字符串共同具有的字符在再辅传中首先出现的位置。

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s1 = "first second second third";
    string s2 = "asecond";
    int index = s1.find_first_of(s2);
    if(index < s1.length())
        cout<<"Found at index : "<< index <<endl;
    else
        cout<<"Not found"<<endl;
    return 0;
}
运行结果为:

Found at index : 3
s1 和 s2 共同具有的字符是 ’s’,该字符在 s1 中首次出现的下标是3,故查找结果返回3。

时间: 2025-01-26 20:49:47

简单介绍C++ string字符串的增删改查的相关文章

BootstrapTable+KnockoutJS相结合实现增删改查解决方案(三)两个Viewmodel搞定增删改查_javascript技巧

前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打算正式将ko用起来,于是乎对ko和bootstraptable做了一些封装,在此分享出来供园友们参考.封装思路参考博客园大神萧秦,如果园友们有更好的方法,欢迎讨论. KnockoutJS系列文章: BootstrapTable与KnockoutJS相结合实现增删改查功能[一] BootstrapTa

BootStrap实现带有增删改查功能的表格(DEMO详解)_javascript技巧

前言 bootstrap的表格样式,有类似EasyUI的表格,也有卡片式表格,放到移动端显示,各有千秋.但是BootStrap自带的表格是没有操作列的,网上的资源不少,但是都是比较单一.零碎,JS.CSS也经常给的不全,自己经过大概一个月左右的时间,把表格封装了一下,希望能分享给大家. 表格封装了3个版本,接下来给大家展示一下样式和代码. 版本一 1. 样式 表格布局: 添加:添加一行新的空白代码 修改:选中可修改的列,点击需要修改的单元格,即可变成可编辑的状态. 2.代码 View代码: <d

PHP简单操作MongoDB的方法(安装及增删改查)_php技巧

本文实例讲述了PHP简单操作MongoDB的方法.分享给大家供大家参考,具体如下: php操作MongoDB的话首先从网上下载MongoDB的扩展包,https://github.com/mongodb/mongo-php-driver/downloads,选择对应的扩展包. 这是我下的,然后解压,VC6适合apache,VC9适合IIS,ts(thread safe)指PHP以模块形式运行的. 然后把其中的php_mongo.dll放在PHP中的ext文件夹中,然后在PHP.INI里面加入ex

PHP简单数据库操作类实例【支持增删改查及链式操作】_php技巧

本文实例讲述了PHP简单数据库操作类.分享给大家供大家参考,具体如下: 在进行项目开发时,数据库是必不可少的东西了.但是很多时候却又对数据库SQL语句的繁杂而感到头疼.提供一个我自己使用的数据库操作类(模型Model),供大家使用.支持增.删.改.查,支持链式操作,代码不到100行,非常小巧方便,很适合小项目的快速部署使用. /** * * @Authot: summer * * @E-mail: wenghang1228@me.com * * @Data: 2015-02-06 * * @Pr

简单用户登录和数据增删改查

问题描述 简单用户登录和数据增删改查 <%@page pageEncoding=""utf-8"" isELIgnored=""false""%><%@taglib uri=""http://java.sun.com/jsp/jstl/core"" prefix=""c""%><%@taglib uri="&

将xml文件作为一个小的数据库,进行学生的增删改查的简单实例_AJAX相关

1.xml文件: <?xml version="1.0" encoding="UTF-8"?><Students> <student id="2"> <name>ttt</name> <age>44</age> </student> <student id="3"> <name>linda2</name

Java通过JDBC进行简单的增删改查MySQL数据库

JDBC基本操作   下面的所有方法和数据成员都在public class JDBCOperation内部. (1)定义记录的类(可选) 这样做主要是为了便于操作和接口定义,是非必须的. static class Student {         private String Id;         private String Name;         private String Sex;         private String Age;           Student(Str

mybatis generator 配置 反向生成Entity简单增删改查(推荐)_java

mybatis generator 配置 反向生成Entity简单增删改查实例代码如下所示: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd

Yii2框架数据库简单的增删改查语法小结

User::find()->all(); //返回所有用户数据: User::findOne($id); //返回 主键 id=1 的一条数据: User::find()->where(['name' => 'ttt'])->one(); //返回 ['name' => 'ttt'] 的一条数据: User::find()->where(['name' => 'ttt'])->all(); //返回 ['name' => 'ttt'] 的所有数据: U