IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++字符串string详解 -> 正文阅读

[C++知识库]C++字符串string详解

C++字符串String

简介:

string类是C++中用来操作字符串序列的、可以自身管理内存的容器,自身携带的构造函数和析构函数。

它支持元素的存取访问、字符串比较、字符串内容的修改和替换、字符串连接、字符串的查找和搜索、字符串的IO操作、可以方便的获取器大小和容量等等。

头文件:

为了在我们的程序中使用string类型,我们必须包含头文件 。如下:

#include //注意这里不是string.h string.h是C字符串头文件

功能函数:

赋值:

  • =

  • assign() //赋以新值,新值可以是string(如:s=ns)、c_string(如:s=”gaint”)甚至单一字符(如:s=’j’)

    s.assign(str);
    s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串
    s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s
    s.assign(“gaint”); //
    s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串
    s.assign(5,’x’);//把五个x赋给字符串
    

输入输出:

  • getline(),>> //从stream读取某值

  • << //将谋值写入stream

  • getline(),它从输入流读取一行内容,直到遇到分行符或到了文件尾。

大小和容量

  • size(),length() //返回字符数量

  • max_size() //返回字符的可能最大个数

  • empty() //判断字符串是否为空

  • capacity() //返回重新分配之前的字符容量

  • reserve() //保留一定量内存以容纳一定数量的字符

元素存取:

  • [ ]
  • at() / /存取单一字符
str[i]   str.at(i)
  • 我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效(有效索引0~str.length()),如果索引失效,会引起未定义的行为。而at()会检查,如果使用at()的时候索引无效,会抛出out_of_range异常。

  • 有一个例外不得不说,const stringa;的操作符[]对索引值是a.length()仍然有效,其返回值是’\0’。其他的各种情况,a.length()索引都是无效的。

迭代器:

  • begin();//提供类似STL的迭代器支持
  • end() ;
  • rbegin() ;//逆向迭代器
  • rend() ;

插入:

insert():这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。

 s.insert(0,”my name”);
 s.insert(1,str); 
 s.insert(1,str,2);从1位置插入str的前2个字符

不支持插入字符类型的单个字符

尾部增加字符:

    - s1=s1+s2;//加字符串
    - s1=s1+"Hello";//加C字符串
    - s=s+'a';//加字符
    
  • append()

    s.append(str);
    s.append(str,1,3);
    s.append(str,2,string::npos);
    s.append(“my name is jiayp”);
    s.append(“nico”,5);
    s.append(5,’x’);
    
  • push_back()

    s.push_back(‘a’);//这个函数只能增加单个字符
    

删除:

s.erase(13);//从索引13开始往后全删除

s.erase(7,5);//从索引7开始往后删5个

替换:

s.replace();

s.replace(1,2,”nternationalizatio”);//删除从索引1开始的2个字符,然后从1后开始替换成后面的string

s.replace(1,3,str,2,4);//从1开始用str种[2,4]的字符替换

s.replace(1,4,4,'X');// //用4个X替换 【1,4】的字符

s.replace(ste.begin(),ste.end());//使用迭代器

提取子串:

substr():

s.substr();//返回s的全部内容
s.substr(11);//从索引11往后的子串
s.substr(5,6);//从索引5开始6个字符

连接:

“+”

比较:

  • C++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如str<”hello”)。在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同时,string(“aaaa”) <string(aaaaa)。

  • 成员函数compare()。他支持多参数处理,支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果,返回值意义如下:0-相等〉0-大于 <0-小于。

    string s(“abcd”);
         
    s.compare(“abcd”); //返回0
    s.compare(“dcba”); //返回一个小于0的值
    s.compare(“ab”); //返回大于0的值  
    

查找:

find():

s.find(s1,n,m);

这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下:第一个参数是被搜寻的对象。第二个参数(可有可无)指出string内的搜寻起点索引,第三个参数(可有可无)指出搜寻的字符个数。

们可以直接把函数和npos进行比较(如:if(s.find(“jia”)==string::npos))。也可以看作返回的是-1。

string strFind = “ISMILE”
string str = "hello,I'm ISMILELI,Thank you for paying attention to me! "
str.find(strFind,0); // 正向查找
str.find(strFind,3); // 从下标位置3开始正向查找
str.rfind(strFind,0); // 反向查找
str.rfind(strFind,3); // 从下标位置3开始反向查找
str.find_first_of(strFind); // 查找第一个是strFind的子串
str.find_first_of(‘I’); // 查找第一个是I的字符
str.find_first_not_of(strFind); // 查找第一个不是strFind的子串
str.find_first_not_of(‘I’); // 查找第一个不是I的字符
str.find_last_of(strFind); // 查找最后一个是strFind的子串
str.find_last_of(‘I’); // 查找最后一个是I的字符
str.find_last_not_of(strFind); // 查找最后一个不是strFind的子串
str.find_last_not_of(‘I’); // 查找最后一个不是I的字符

交换:

swap(); //交换两个字符串的内容

清空:

  • s="";
  • s.clear();
  • s.erase();

其他:

读入整行字符串的函数getline():

大家百度会发现getline()的原型是 istream& getline ( istream &is , string &str , char delim );

其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为’\n’,也就是回车换行符(遇到回车停止读入)。

getline(cin,str,'#'); cin给str,遇到#停止

字符串和整形的转换:

头文件 定义了三个istringstreamostringstreamstringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

主要用于整形和字符串型的转换
字符串->整形
string str;
stringstream ss;
ss<<str;
int a;
ss>>a;
整形->字符串
int a=10000;
string str;
stringstream ss;
ss<<a;
ss>>str;
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 12:59:34  更:2021-09-12 13:01:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 21:34:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码