当前位置: 首页 > 编程日记 > 正文

标准C++中的string类的用法总结

相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用法的一部分罗列如下,只起一个抛砖引玉的作用吧,好了,废话少说,直接进入正题吧!

要想使用标准C++中string类,必须要包含

#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件

using  std::string;

using  std::wstring;

using namespace std;

下面你就可以使用string/wstring了,它们两分别对应着char和wchar_t。

string和wstring的用法是一样的,以下只用string作介绍:


string类的构造函数:

string(const char *s);    //用c字符串s初始化
string(int n,char c);     //用n个字符c初始化
此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 ;


string类的字符操作:
const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);
operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。
const char *data()const;//返回一个非null终止的c字符数组
const char *c_str()const;//返回一个以null终止的c字符串
int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目


string的特性描述:
int capacity()const;    //返回当前容量(即string中不必增加内存即可存放的元素个数)
int max_size()const;    //返回string对象中可存放的最大字符串的长度
int size()const;        //返回当前字符串的大小
int length()const;       //返回当前字符串的长度
bool empty()const;        //当前字符串是否为空
void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分

string类的输入输出操作:
string类重载运算符operator>>用于输入,同样重载运算符operator<<用于输出操作。
函数getline(istream &in,string &s);用于从输入流in中读取字符串到s中,以换行符'\n'分开。

string的赋值:
string &operator=(const string &s);//把字符串s赋给当前字符串
string &assign(const char *s);//用c类型字符串s赋值
string &assign(const char *s,int n);//用c字符串s开始的n个字符赋值
string &assign(const string &s);//把字符串s赋给当前字符串
string &assign(int n,char c);//用n个字符c赋值给当前字符串
string &assign(const string &s,int start,int n);//把字符串s中从start开始的n个字符赋给当前字符串
string &assign(const_iterator first,const_itertor last);//把first和last迭代器之间的部分赋给字符串

string的连接:
string &operator+=(const string &s);//把字符串s连接到当前字符串的结尾 
string &append(const char *s);            //把c类型字符串s连接到当前字符串结尾
string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾
string &append(const string &s);    //同operator+=()
string &append(const string &s,int pos,int n);//把字符串s中从pos开始的n个字符连接到当前字符串的结尾
string &append(int n,char c);        //在当前字符串结尾添加n个字符c
string &append(const_iterator first,const_iterator last);//把迭代器first和last之间的部分连接到当前字符串的结尾


string的比较:
bool operator==(const string &s1,const string &s2)const;//比较两个字符串是否相等
运算符">","<",">=","<=","!="均被重载用于字符串的比较;
int compare(const string &s) const;//比较当前字符串和s的大小
int compare(int pos, int n,const string &s)const;//比较当前字符串从pos开始的n个字符组成的字符串与s的大小
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比较当前字符串从pos开始的n个字符组成的字符串与s中

//pos2开始的n2个字符组成的字符串的大小
int compare(const char *s) const;
int compare(int pos, int n,const char *s) const;
int compare(int pos, int n,const char *s, int pos2) const;
compare函数在>时返回1,<时返回-1,==时返回0


string的子串:
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串

string的交换:
void swap(string &s2);    //交换当前字符串与s2的值


string类的查找函数: 
int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置
int find(const char *s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
int find(const char *s, int pos, int n) const;//从pos开始查找字符串s中前n个字符在当前串中的位置
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
//查找成功时返回所在位置,失败返回string::npos的值 
int rfind(char c, int pos = npos) const;//从pos开始从后向前查找字符c在当前串中的位置
int rfind(const char *s, int pos = npos) const;
int rfind(const char *s, int pos, int n = npos) const;
int rfind(const string &s,int pos = npos) const;
//从pos开始从后向前查找字符串s中前n个字符组成的字符串在当前串中的位置,成功返回所在位置,失败时返回string::npos的值 
int find_first_of(char c, int pos = 0) const;//从pos开始查找字符c第一次出现的位置
int find_first_of(const char *s, int pos = 0) const;
int find_first_of(const char *s, int pos, int n) const;
int find_first_of(const string &s,int pos = 0) const;
//从pos开始查找当前串中第一个在s的前n个字符组成的数组里的字符的位置。查找失败返回string::npos 
int find_first_not_of(char c, int pos = 0) const;
int find_first_not_of(const char *s, int pos = 0) const;
int find_first_not_of(const char *s, int pos,int n) const;
int find_first_not_of(const string &s,int pos = 0) const;
//从当前串中查找第一个不在串s中的字符出现的位置,失败返回string::npos 
int find_last_of(char c, int pos = npos) const;
int find_last_of(const char *s, int pos = npos) const;
int find_last_of(const char *s, int pos, int n = npos) const;
int find_last_of(const string &s,int pos = npos) const; 
int find_last_not_of(char c, int pos = npos) const;
int find_last_not_of(const char *s, int pos = npos) const;
int find_last_not_of(const char *s, int pos, int n) const;
int find_last_not_of(const string &s,int pos = npos) const;
//find_last_of和find_last_not_of与find_first_of和find_first_not_of相似,只不过是从后向前查找


string类的替换函数: 
string &replace(int p0, int n0,const char *s);//删除从p0开始的n0个字符,然后在p0处插入串s
string &replace(int p0, int n0,const char *s, int n);//删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符
string &replace(int p0, int n0,const string &s);//删除从p0开始的n0个字符,然后在p0处插入串s
string &replace(int p0, int n0,const string &s, int pos, int n);//删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符
string &replace(int p0, int n0,int n, char c);//删除p0开始的n0个字符,然后在p0处插入n个字符c
string &replace(iterator first0, iterator last0,const char *s);//把[first0,last0)之间的部分替换为字符串s
string &replace(iterator first0, iterator last0,const char *s, int n);//把[first0,last0)之间的部分替换为s的前n个字符
string &replace(iterator first0, iterator last0,const string &s);//把[first0,last0)之间的部分替换为串s
string &replace(iterator first0, iterator last0,int n, char c);//把[first0,last0)之间的部分替换为n个字符c
string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);//把[first0,last0)之间的部分替换成[first,last)之间的字符串


string类的插入函数: 
string &insert(int p0, const char *s);
string &insert(int p0, const char *s, int n);
string &insert(int p0,const string &s);
string &insert(int p0,const string &s, int pos, int n);
//前4个函数在p0位置插入字符串s中pos开始的前n个字符
string &insert(int p0, int n, char c);//此函数在p0处插入n个字符c
iterator insert(iterator it, char c);//在it处插入字符c,返回插入后迭代器的位置
void insert(iterator it, const_iterator first, const_iterator last);//在it处插入[first,last)之间的字符
void insert(iterator it, int n, char c);//在it处插入n个字符c


string类的删除函数 
iterator erase(iterator first, iterator last);//删除[first,last)之间的所有字符,返回删除后迭代器的位置
iterator erase(iterator it);//删除it指向的字符,返回删除后迭代器的位置
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串


string类的迭代器处理: 
string类提供了向前和向后遍历的迭代器iterator,迭代器提供了访问各个字符的语法,类似于指针操作,迭代器不检查范围。
用string::iterator或string::const_iterator声明迭代器变量,const_iterator不允许改变迭代的内容。常用迭代器函数有:
const_iterator begin()const;
iterator begin();                //返回string的起始位置
const_iterator end()const;
iterator end();                    //返回string的最后一个字符后面的位置
const_iterator rbegin()const;
iterator rbegin();                //返回string的最后一个字符的位置
const_iterator rend()const;
iterator rend();                    //返回string第一个字符位置的前面
rbegin和rend用于从后向前的迭代访问,通过设置迭代器string::reverse_iterator,string::const_reverse_iterator实现


字符串流处理: 
通过定义ostringstream和istringstream变量实现,#include <sstream>头文件中
例如:
    string input("hello,this is a test");
    istringstream is(input);
    string s1,s2,s3,s4;
    is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"
    ostringstream os;
    os<<s1<<s2<<s3<<s4;
    cout<<os.str();

转载于:https://www.cnblogs.com/hzhida/archive/2012/09/26/2704578.html

相关文章:

NCEPU:线下组队学习周报(007)

线下组队学习 经过一段时间的准备&#xff0c;我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为&#xff1a; &#xff08;1&#xff09;周志华的《机器学习》&#xff08;西瓜书&#xff09; …

java培训面试技巧分享

很多人在学会java技术之后&#xff0c;就开始筹备自己的面试了&#xff0c;java技术在互联网行业的需求是很大的&#xff0c;所以内卷是很严重的&#xff0c;在面试环节一定要全力以赴才行&#xff0c;下面小编就教大家一些java培训面试技巧&#xff0c;希望能帮助到大家。 jav…

Python线程锁

多线程适用于IO密集型&#xff0c;多线程实现方式有两种&#xff0c;详见下方例子 例子&#xff1a; import threading class MyThread(threading.Thread): def __init__(self, args): #使用super写法&#xff0c;按照父类.方法的方式直接重写 super(MyThread, self).__init__(…

session_id

<?php session_start(); echo session_id(); // 输出 dqr58dnuqj2gufvg4o3tmjb9v4?>设置 session_id()<?php session_id("NowaMagic"); session_start(); echo session_id(); ?>程序恢复session&#xff0c;首先要知道session_id&#xff0c;大家通过…

【青少年编程】【二级】寻找宝石

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

零基础参加java培训主要学什么

互联网行业永远是一个需求非常大的行业&#xff0c;尤其是技术人员岗位&#xff0c;java技术岗一直很受大家的关注&#xff0c;不少学员都是零基础开始学&#xff0c;那么零基础参加java培训主要学什么呢?来看看下面的详细介绍。 零基础参加java培训主要学什么?其实无论学什么…

python pexpect

123456789101112131415161718192021222324252627282930313233343536373839404142434445Python 远程批量修改密码脚本#tar -zxvf pexpect-3.0.tar.gz#cd pexpect-3.0#python setup.py install#!/usr/bin/env python#coding:utf8import pexpect impo…

牧小熊:Adobe Illustrator 在科研作图中的应用!

聂雄伟&#xff0c;华中农业大学&#xff0c;Datawhale原创作者。 关于大数据的完整讲解&#xff01;电商数据分析项目总结&#xff01;数据项目总结&#xff1a;蛋壳公寓租金分析&#xff01;数据项目总结&#xff1a;王者荣耀总决赛预测&#xff01;你要的用户画像实践来了&…

win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃

安装过程与其它Windows安装程序一样&#xff0c;首先出现的是安装向导欢迎界面[img]file:///C:/Users/房继诺/AppData/Roaming/Tencent/Users/1194361820/QQ/WinTemp/RichOle/0U9%7BVWW%60KM~S2X)VM2QF0N.jpg[/img] 直接点击“Next”&#xff0c;继续&#xff0c;选择安装类型这…

UI设计培训教程分享:UI设计师的色彩使用技巧

作为一名合格的UI设计师&#xff0c;色彩的使用是非常重要的&#xff0c;一个专业的UI设计师对于UI设计色彩的搭配是非常的出色的&#xff0c;下面小编就为大家分享UI设计培训教程&#xff1a;UI设计师的色彩使用技巧 UI设计培训教程分享&#xff1a;UI设计师的色彩使用技巧 一…

hive 使用技巧笔记

来源&#xff1a;http://michael-roshen.iteye.com/blog/2115268 例子&#xff1a; INSERT OVERWRITE TABLE prices_collected_${hiveconf:wid_version} select pc.collect_id as product_id , regexp_extract(pc.price,(\\d*\\.?\\d),1) as price , pc.region, as location…

GNU make manual 翻译( 一百四十九)

继续翻译 5.7.4 The --print-directory Option ------------------------------------If you use several levels of recursive make invocations, the -w or --print-directory option can make the output a lot easier to understand by showing each directory as make sta…

【青少年编程】马雷越:商品价格竞猜

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

女生参加web前端培训压力大吗

女生参加web前端培训压力大吗?这个问题很多人都是想知道的&#xff0c;因为对于互联网行业来说&#xff0c;大部分都是男性&#xff0c;尤其是技术岗位&#xff0c;女生做前端压力大小和能力也有很大的关系&#xff0c;前端技术好工作效率高&#xff0c;那么压力相对较低。 女…

Android 入门开发

哈哈 我已经学会Android开发了 而且还发布了两款产品 转载于:https://www.cnblogs.com/Aixieer/archive/2012/10/04/2711443.html

整理了一下Asp.net源码常见问题(完善中...),欢迎大家补充修正(最后更新于06-01)!...

以下是一些51aspx网友经常反馈的问题&#xff0c;特总结放在下面&#xff0c;本部分内容会陆续更新。同时也提醒广大网友在仔细查看源码项目对应的运行环境及每个代码中所附的文本文件《51aspx源码必读.txt》。 Q&#xff1a;打开51aspx上网站源码项目需要什么样的软件环境&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 1. 一元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 相关内容&#xff1a; 西瓜书公式推导讲解来了&#xff01;0. 导学 后台…

Python培训教程分享:“高效实用” 的Python工具库

作为一名合格Python技术员&#xff0c;对于Python工具库的使用是少不了的&#xff0c;本期Python培训教程就为大家分享的是““高效实用” 的Python工具库”&#xff0c;希望能够帮助到大家。 Python培训教程分享&#xff1a;“高效实用” 的Python工具库&#xff1a; 1、Reque…

LNMP安装与启动脚本编写

1、安装mysql 1cd /usr/local/src/ 下载mysql&#xff1a; 1wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 解压&#xff1a; 1tar zxvf/usr/local/src/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 更改命名&#xff1a; 1mv mysql-5…

Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

Flash Builder在Debug时出现的问题&#xff1a;Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法&#xff1a; 1. 进入Flash Builder的安装目录 C:\Program Files\Adobe\Adobe Flash Builder 4.6\player\win\11.1 2. 安装flashplayer_11_plugin_debug.exe&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 2. 多元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 以往内容&#xff1a; 西瓜书公式推导讲解来了&#xff01;0. 导学1. 一…

UI设计培训分享:ui设计师如何培养设计思维?

作为一名UI设计师&#xff0c;工作上经常会遇到思维碰撞的问题&#xff0c;培养自己的设计思维是大部分UI设计师都需要的&#xff0c;那么ui设计师如何培养设计思维呢?来看看下面的详细介绍。 UI设计培训分享&#xff1a;ui设计师如何培养设计思维? 一、因舍而得 正如我们看到…

[转载红鱼儿]kbmmw 开发点滴:ErrorTable用法

TkbmMWClientQuery有一个ErrorTable属性&#xff0c;用于记录提交Query时返回的错误结果。当用户保存修改的业务数据&#xff0c;出错时&#xff0c;可以用ErrorTable定位出错的记录并提示错误信息。 下面是实现代码&#xff1a; procedure TForm2.Button4Click(Sender: TObjec…

ijkplayer iOS集成

2019独角兽企业重金招聘Python工程师标准>>> http://www.jianshu.com/p/1f06b27b3ac0 如果按楼主的方式配置后还编译报错&#xff0c;可能的原因是&#xff0c;需要将环境设置成C混编环境&#xff0c;可以直接将AppDelegate.m 改名成AppDelegate.mm 即可 转载于:htt…

【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection

Whalepaper是由周郴莲负责的一个每周分享论文的活动。 NLP 论文分享&#xff1a;每周日 晚上 九点CV 论文分享&#xff1a; 每周日 晚上 九点Res 论文分享&#xff1a;每周六 晚上 九点半 欢迎对paper感兴趣的人加入我们的分享啊&#xff01;&#xff01;&#xff01; 分享人…

软件测试培训分享:做软件测试工作如何清楚的描述一个bug

一名合格的软件测试工程师是需要清楚的交代自己的工作任务的&#xff0c;必须要清楚的告诉技术员出现的bug&#xff0c;那么做软件测试工作如何清楚的描述一个bug呢?来看看下面的详细介绍。 软件测试培训分享&#xff1a;做软件测试工作如何清楚的描述一个bug? 发现问题的版本…

kvm虚拟化学习笔记(十七)之KVM到KVM之v2v迁移

1.源KVM虚拟主机node1(1).查看源KVM虚拟主机上的虚拟机列表,本文计划将CentOS6.5-01虚拟机迁移到其它KVM虚拟主机中。[rootnode1 ~]# virsh list --allId Name State ----------------------------------------------------- CentOS6.5-01 …

UVA 216 Getting in Line

大意&#xff1a;给你一些定点&#xff0c;让你以代价最小的边将所有的点连起来。 思路&#xff1a;数据范围很小&#xff0c;可以通过最小生成树或者回溯来解决。 最小生成树去写时不知道哪错了&#xff0c;于是用回溯模拟了一遍&#xff0c;相当于模拟一个数组的全排列。 AC …

【青少年编程】【三级】猜数字

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 猜数字…

参加web前端开发培训具体要学什么内容

学习web前端技术不是一天两天就能学会的&#xff0c;想要成为一名合格的web前端工程师&#xff0c;一定要进行系统的培训学习&#xff0c;那么下面小编就为大家详细的介绍一下参加web前端开发培训具体要学什么内容? 参加web前端开发培训具体要学什么内容? 一、了解web前端 we…