C++ string字符串的修改与替换方法详析

字符串内容的变化包括修改和替换两种。本节将分别讲解字符串内容的修改和字符串内容的替换。

字符串内容的修改

可以通过使用多个函数修改字符串的值。例如 assign(),operator=,erase(),交换(swap),插入(insert)等。另外,还可通过 append() 函数添加字符。

下面逐一介绍各成员函数的使用方法。

assign()函数

使用 assign() 函数可以直接给字符串赋值。该函数既可以将整个字符串赋值给新串,也可以将字符串的子串赋值给新串。其在 basic_string 中的原型为:

basic_string& assign (const E*s); //直接使用字符串赋值
basic_string& assign (const E*s, size_type n);
basic_string& assign (const basic_string & str, size_type pos, size_type n);
//将str的子串赋值给调用串
basic_string& assign (const basic_string& str); //使用字符串的“引用”賦值
basic_string& assign (size_type n, E c) ; //使用 n个重复字符賦值
basic_string& assign (const_iterator first, const_iterator last); //使用迭代器赋值

以上几种方法在例 1 中均有所体现。请读者参考下述代码。

【例 1】

#include <iostream>
#include <string>
using namespace std;
int main()
{
 string str1 ("123456");
 string str;
 str.assign (str1); //直接赋值
 cout << str << endl;
 str.assign (str1, 3, 3); //赋值给子串
 cout << str << endl;
 str.assign (str1,2,str1.npos);//赋值给从位置 2 至末尾的子串
 cout << str << endl;
 str.assign (5,'X'); //重复 5 个'X'字符
 cout << str << endl;
 string::iterator itB;
 string::iterator itE;
 itB = str1.begin ();
 itE = str1.end();
 str.assign (itB, (--itE)); //从第 1 个至倒数第 2 个元素,赋值给字符串 str
 cout << str << endl;
 return 0;
}

operator= 函数

operator= 的功能就是赋值。

erase()函数

erase() 函数的原型为:

 iterator erase (iterator first, iterator last);
 iterator erase (iterator it);
 basic_string& erase (size_type p0 = 0, size_type n = npos);

erase() 函数的使用方法为:

str.erase (str* begin(), str.end());
 或 str.erase (3);

swap()函数

swap()函数的原型为:

void swap (basic_string& str);

swap()函数的使用方法为:

string str2 ("abcdefghijklmn");
str.swap (str2);

insert()函数

insert () 函数的原型为:

basic_string& insert (size_type p0 , const E * s); //插人 1 个字符至字符串 s 前面
basic_string& insert (size_type p0 , const E * s, size_type n); // 将 s 的前 3 个字符插入p0 位置
basic_string& insert (size_type p0, const basic_string& str);
basic_string& insert (size_type p0, const basic_string& str,size_type pos, size_type n); //选取 str 的子串
basic_string& insert (size_type p0, size_type n, E c); //在下标 p0 位置插入 n 个字符 c
iterator insert (iterator it, E c); //在 it 位置插入字符 c
void insert (iterator it, const_iterator first, const_iterator last); //在字符串前插入字符
void insert (iterator it, size_type n, E c) ; //在 it 位置重复插入 n 个字符 c

insert() 函数的使用方法为:

 string A("ello");
 string B ;
 B.insert(1,A);
 cout << B << endl;
 A = "ello";
 B = "H";
 B.insert (1,"yanchy ",3);
 cout<< B <<endl;
 A = "ello";
 B = "H";
 B.insert (1,A,2,2);
 cout << B << endl;
 A="ello";
 B.insert (1 , 5 , 'C');
 cout << B << endl;
 A = "ello";
 string::iterator it = B.begin () +1;
 const string:: iterator itF = A.begin();
 const string:: iterator itG = A.end();
 B.insert(it,itF,itG);
 cout << B << endl;

append 函数

append() 函数的原型为:

 basic_string& append (const E * s); //在原始字符串后面追加字符串s
 basic_string& append (const E * s, size_type n);//在原始字符串后面追加字符串 s 的前 n 个字符
 basic_string& append (const basic_string& str, size_type pos,size_type n);//在原始字符串后面追加字符串 s 的子串 s [ pos,…,pos +n -1]
 basic_string& append (const basic_string& str);
 basic_string& append (size_type n, E c); //追加 n 个重复字符
 basic_string& append (const_iterator first, const_iterator last); //使用迭代器追加

 append() 函数的使用方法为:
 A = "ello";
 cout << A << endl;
 cout << B << endl;
 B.append(A);
 cout << B << endl;
 A = "ello";
 cout << A << endl;
 cout << B << endl;
 B.append("12345",2);
 cout << B << endl;
 A = "ello";
 cout << A << endl;
 cout << B << endl;
 B.append("12345",2,3);
 cout << B << endl;
 A = "ello";
 B = "H";
 cout << A << endl;
 cout << B << endl;
 B.append (10, 'a');
 cout << B << endl;
 A = "ello";
 B = 'H';
 cout << A << endl ;
 cout << B << endl;
 B.append(A.begin(), A, end());
 cout << B << endl;

下面通过一个完整的例子介绍这些函数的使用:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
 string str1 ("123456");
 string str2 ("abcdefghijklmn");
 string str;
 str.assign(str1);
 cout << str << endl;
 str.assign (str1 , 3, 3);
 cout << str << endl;
 str.assign (str1, 2, str1.npos);
 cout << str << endl;
 str.assign (5, 'X');
 cout << str << endl;
 string::iterator itB;
 string::iterator itE;
 itB = str1.begin ();
 itE = str1.end();
 str.assign (itB, (--itE));
 cout << str << endl;
 str = str1;
 cout << str << endl;
 str.erase(3);
 cout << str << endl;
 str.erase (str.begin (), str.end());
 cout << ":" << str << ":" << endl;
 str.swap(str2);
 cout << str << endl;
 string A ("ello");
 string B ("H");
 B.insert (1, A);
 cout << B << endl;
 A = "ello";
 B ='H';
 B.insert (1, "yanchy ", 3);
 cout << "插入: " << B << endl;
 A = "ello";
 B = "H";
 B.insert(1,A,2,2);
 cout << "插入:" << B << endl;
 A = "ello";
 B = "H";
 B.insert (1,5,'C');
 cout << "插入:" << B << endl;
 A = "ello";
 B = "H";
 string::iterator it = B.begin () +1;
 const string::iterator itF = A.begin ();
 const string::iterator itG = A.end ();
 B.insert(it,itF,itG);
 cout<<"插入:"<< B << endl;
 A = "ello";
 B = "H";
 cout << "A = " << A <<", B = " << B << endl ;
 B.append (A);
 cout << "追加:" << B << endl;
 B = "H";
 cout << "A = "<< A << ", B= " << B << endl;
 B.append("12345", 2);
 cout << "追加:" << B << endl;
 A = "ello";
 B = "H";
 cout << "A = " << A << ", B= " << B << endl;
 B.append ("12345", 2, 3);
 cout << "追加:" << B << endl;
 A = "ello";
 B = "H";
 cout << "A = " << A <<", B = " << B << endl;
 B.append (10 , 'a');
 cout << "追加:"<< B << endl;
 A = "ello";
 B = "H";
 cout << "A = " << A << ", B = " << B << endl;
 B.append(A.begin() , A.end());
 cout << "追加:" << B << endl;
 cin.get();
 return 0;
}

程序运行结果:

123456
456
3456
XXXXX
12345
123456
123
::
abcdefghijklmn
Hello
插入: Hyan
插入:Hlo
插入:HCCCCC
插入:Hello
A = ello, B = H
追加:Hello
A = ello, B= H
追加:H12
A = ello, B= H
追加:H345
A = ello, B = H
追加:Haaaaaaaaaa
A = ello, B = H
追加:Hello

字符串内容的替换

如果在一个字符串中标识出具体位置,便可以通过下标操作修改指定位置字符的值,或者替换某个子串。完成此项操作需要使用 string 类的成员函数 replace()。

replace() 函数的原型如下:
basic_string& replace (size_type p0, size_type n0, const E * s); //使用字符串 s 中的 n 个字符,从源串的位置 P0 处开始替换
basic_string& replace (size_type p0, size_type n0, const E *s, size_type n); //使用字符串 s 中的 n 个字符,从源串的位置 P0 处开始替换 1 个字符
basic_string& replace (size_type p0, size_type n0, const basic_string& str); //使用字符串 s 中的 n 个字符,从源串的位置 P0 处开始替换
basic_string& replace (size_type p0, size_type n0, const basic_string& str, size_type pos, size_type n); //使用串 str 的子串 str [pos, pos + n-1] 替换源串中的内容,从位置 p0 处开始替换,替换字符 n0 个
basic_string& replace (size_type p0, size_type n0, size_type n, E c); //使用 n 个字符 'c' 替换源串中位置 p0 处开始的 n0 个字符
basic_string& replace (iterator first0, iterator last0, const E * s);//使用迭代器替换,和 1) 用法类似
basic_string& replace (iterator first0, iterator last0, const E * s, size_type n);//和 2) 类似
basic_string& replace (iterator first0, iterator last0, const basic_string& str); //和 3) 类似
basic_string& replace (iterator first0, iterator last0, size_type n, E c); //和 5) 类似
basic_string& replace (iterator first0, iterator last0, const_iterator first, const_iterator last); //使用迭代器替换

该函数的使用方法参照下面的程序:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
  string var ("abcdefghijklmn");
  const string dest ("1234");
  string dest2 ("567891234");
  var.replace (3,3, dest);
  cout << "1: " << var << endl;
  var = "abcdefghijklmn";
  var.replace (3,1, dest.c_str(), 1, 3);
  cout << "2: " << var << endl;
  var ="abcdefghijklmn";
  var.replace (3, 1, 5, 'x');
  cout << "3: " << var << endl;
  string::iterator itA, itB;
  string::iterator itC, itD;
  itA = var.begin();
  itB = var.end();
  var = "abcdefghijklmn";
  var.replace (itA, itB, dest);
  cout << "4: " << var << endl;
  itA = var.begin ();
  itB = var.end();
  itC = dest2.begin () +1;
  itD = dest2.end ();
  var = "abodefghijklmn";
  var.replace (itA, itB, itC, itD);
  cout << "5: " << var << endl;
  var = "abcdefghijklmn";
  var.replace (3, 1, dest.c_str(), 4); //这种方式会限定字符串替换的最大长度
  cout <<"6: " << var << endl;
  return 0;
}

程序执行结果为:

1: abc1234ghijklmn
    2: abc234efghijklmn
    3: abcxxxxxefghijklmn
    4: 1234
    5: 67891234efghijklmn
    6: abc1234efghijklmn

本节讲述了诸多可进行字符串内容的修改和替换的函数及其使用方法,并给出了例题。由于每个函数可能有多个原型,希望读者根据自己的情况,掌握其中的一种或两种,以满足自己使用的需要。同时,希望读者能够对照例题的执行效果,认真阅读本章节中的源代码,彻底掌握本节内容。

到此这篇关于C++ string字符串的修改与替换方法的文章就介绍到这了,更多相关C++ string字符串修改与替换内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++中string替换所有指定字符串的方法

    C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212″这个字符串的所有"12″都替换成"21″,结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现,代码如下: # include # include using namespace st

  • C++ string替换指定字符实例代码

    前言 C++的string提供了replace方法来实现字符串的替换,但是有时候我们想要实现类似JAVA中的替换功能--将string中的某个字符a全部替换成新的字符b,这个功能在提供的replace方法中并没有实现. 不过只要再深入了解一下STL,就可以在变易算法中找到解决方案--使用#include<algorithm>中的replace算法即可. 测试代码如下: #include<algorithm> #include<string> #include<io

  • C++ 中String 替换指定字符串的实例详解

    C++ 中String 替换指定字符串的实例详解 C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现, 代码如

  • C++ string字符串的修改与替换方法详析

    字符串内容的变化包括修改和替换两种.本节将分别讲解字符串内容的修改和字符串内容的替换. 字符串内容的修改 可以通过使用多个函数修改字符串的值.例如 assign(),operator=,erase(),交换(swap),插入(insert)等.另外,还可通过 append() 函数添加字符. 下面逐一介绍各成员函数的使用方法. assign()函数 使用 assign() 函数可以直接给字符串赋值.该函数既可以将整个字符串赋值给新串,也可以将字符串的子串赋值给新串.其在 basic_string

  • Java String字符串和Unicode字符相互转换代码详解

    网上大部分有关"Java String字符串和Unicode字符相互转换代码"的博文几乎都仅是将全为Unicode字符的字符串进行转换,而我们日常很可能需要的是将混有普通字符的Unicode一并转换(例如"\u0061\u0062\u0063(123)",我们希望转换成"abc(123)",而实际上网上的通用方法并不符合该需求,运行即报错),普通字符跳过而Unicode字符要进行转换,在进行字符串的查找替换截取什么的使用正则表达式往往是个很好的选

  • Java实现字符串转为驼峰格式的方法详解

    字符串转为驼峰格式 构建工具类 package com.yt.common.util; import com.yt.common.dto.NameCode; import com.yt.exam.enums.ZyEnum; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串转为驼峰格式 构建工具类 * @author LYY * @date 2022/07

  • 基于JavaScript中字符串的match与replace方法(详解)

    1.match方法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. match()方法的返回值为:存放匹配结果的数组. 2.replace方法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. replace方法的返回值为:一个新的字符串. 3.说明 以上2个方法的参数在使用正则表达式时主要添加全局g,这样才能对字符串进行全部匹配或者替换. 示例代码: <!DOCTYPE html> <html lang

  • C语言实现字符串字符反向排列的方法详解

    目录 前言 非递归方法 1.循环实现 2.函数实现 递归方法 1.递归方法 2.递归方法 小结 前言 重点的话说在前头,注意不是逆序打印 今天写题,碰到一个很好的题,在这里来个大家做个分享,我会用多种方法来解决 题目具体内容如下: 编写一个函数(递归实现) 实现:将参数字符串中的字符反向排列,不是逆序打印. 要求:不能使用C函数库中的字符串操作函数 但是这里我不会仅仅局限于题目的要求 非递归方法 1.循环实现 1.1循环实现(sizeof) #include <stdio.h> int mai

  • C语言实现短字符串压缩的三种方法详解

    目录 前言 一.通用算法的短字符压缩 二.短字符串压缩 (1)Smaz (2)Shoco (3)Unisox2 三.总结 前言 上一篇探索了LZ4的压缩和解压性能,以及对LZ4和ZSTD的压缩.解压性能进行了横向对比.文末的最后也给了一个彩蛋:任意长度的字符串都可以被ZSTD.LZ4之类的压缩算压缩得很好吗? 本篇我们就来一探究竟. 一.通用算法的短字符压缩 开门见山,我们使用一段比较短的文本:Narrator: It is raining today. So, Peppa and George

  • inux下gettimeofday函数windows替换方法(详解)

    实例如下: #include <time.h> #ifdef WIN32 # include <windows.h> #else # include <sys/time.h> #endif #ifdef WIN32 int gettimeofday(struct timeval *tp, void *tzp) { time_t clock; struct tm tm; SYSTEMTIME wtm; GetLocalTime(&wtm); tm.tm_year

  • 对python 匹配字符串开头和结尾的方法详解

    1.你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme 等等.检 查 字 符 串 开 头 或 结 尾 的 一 个 简 单 方 法 是 使 用str.startswith() 或 者 是str.endswith()方法.比如: >>> filename = 'spam.txt' >>> filename.endswith('.txt') True >>> filename.startswith('file:') Fa

  • vue-vuex中使用commit提交mutation来修改state的方法详解

    在vuex中,关于修改state的方式,需要commit提交mutation.官方文档中有这么一句话: 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation. 为了搞清楚其原因,查阅了很多资料,发现其它人在做vuex的源码解析的时候,并没有将这点说的很明白. 所以只好自己去查看vuex的源码,并且自己做demo进行验证. 但是试验后,发现直接修改state时,store中的state能够改变,并且是响应式的,并没有报错.跟commit提交mutation的方式没啥区别. 后

  • 通过字符串导入 Python 模块的方法详解

    我们平时导入第三方模块的时候,一般使用的是 import 关键字,例如: import scrapy from scrapy.spider import Spider 但是如果各位同学看过 Scrapy 的 settings.py 文件,就会发现里面会通过字符串的方式来指定pipeline 和 middleware,例如: DOWNLOADER_MIDDLEWARES = { 'Test.middlewares.ExceptionRetryMiddleware': 545, 'Test.midd

随机推荐