热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++标准库string类型的操作总结

总结一下C中string的操作,来自〈CPrimer〉第四版。1.string对象的定义和初始化:strings1;空串strings2(s1);将s2初始

 

总结一下C++中string的操作,来自〈C++ Primer〉第四版。

1. string对象的定义和初始化:

string s1; //空串
string s2(s1); //将s2初始化为s1的一个副本
string s3("value"); //s3初始化并赋值
string s4(n,"c"); //s4初始化,赋值为n个'c'
string s5(b,e); //初始化s5为迭代器b,e范围内的副本
string s6(cp); //用c风格的字符串初始化
string s7(cp,n); //cp前n个元素的副本
string s8(s2,pos2); //s8为s2从pos2开始到结尾的副本
string s9(s2,pos2,len2);//同上,不过的长度为len2(不超过s2的长度)
//其中有一种方法需要注意:
char no_null[] = {'H','i'};
string s10(no_null); //错误,不是以null结尾的串
string s10(no_null,2); //ok,可以自动添加null结尾


 

2. string的读写:

string s;
cin >> s;
cout << s << endl;
//注意,cin是会被空白符截断的
//要得到整行输入,采用while循环,或者:
getline(cin,s);


3.string的操作:

s.empty(); //判断s是否为空,相当于s.size()&#61;&#61;0
s.size(); //s的长度
s[n]; //n位置的字符(左值返回)
s1&#43;s2; //返回s1和s2连接的串
s1&#61;s2; //把s1替换为s2的副本
s1&#61;&#61;s2; //判断s1,s2是否相等
!&#61;,<,<&#61;,>,>&#61; //按字典顺序比较
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.insert(p,t); //在迭代器p指向的元素前插入t,返回指向t的迭代器
s.insert(p,n,t);//同上,插入n个t,返回void
s.insert(p,b,e);//插入迭代器b,e间的元素,返回void
s.insert(pos,n,c); //在pos前插入n个字符c,返回s的引用
s.insert(pos,s2);//在pos前插入s2,返回s的引用
s.insert(pos,s2,pos2,len);
//在pos前插入s2中从pos2开始的len个字符,返回s的引用
s.insert(pos,cp,len);
//pos前插入cp数组(c风格字串)的前len个字符,返回s的引用
s.insert(pos,cp);//在pos前插入cp,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.assign(b,e); //用b,e间的元素替换s,返回s
s.assign(n,t); //用n个t替换s,返回s
s.assign(s2); //用s2的副本替换s,返回s的引用
s.assign(s2,pos2,len);
//用s2从pos2开始的len长的副本替换s,返回s的引用
s.assign(cp,len)//用cp的前len个字符副本替换s,返回s的引用
s.assign(cp) //用cp的副本替换s,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.erase(p); //删除迭代器p指向的元素,返回指向后一个元素的迭代器
s.erase(b,e); //删除b,e间的元素,返回值同上
s.erase(pos,len);//删除从pos开始的len个字符,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.substr(pos,n);//返回s中从pos开始的n个字符组成的串
s.substr(pos); //返回s中从pos开始到结尾的串
s.substr(); //返回s的副本
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.append(args); //将args串接在s的后面,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.replace(pos,len,args);
//删除s中从pos开始的len个字符,用args串替换,返回s的引用
//args不能为b2,e2
s.replace(b,e,args);
//删除迭代器b,e范围内的字符,用args替换,返回s的引用
//args不能为s2,pos2,len2
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;append,replace的args的说明
s2 //string
s2,pos2,len2 //s2中下pos2开始的len2个字符
cp //c风格的串
cp,len2 //cp指向以空结束的前len2个字符
n,c //字符c的n个副本
b2,e2 //迭代器b2,e2范围内的所有字符


4.string的查找操作:

s.find(args); //args的第一次出现
s.rfind(args); //最后一次出现
s.find_first_of(args);//args中任意字符的第一次出现
s.find_last_of(args);//args中任意字符的最后一次出现
s.find_first_not_of(args);//查找第一个不属于args的字符
s.find_last_not_of(args);//查找最后一个不属于args的字符
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;args
c,pos&#61;0 //查找字符c,默认从s的0位置开始
s2,pos&#61;0 //查找s2
cp,pos&#61;0 //查找cp(c风格字串)
cp,pos,n //从s的pos开始查找cp的前n个字符,没有默认值


5.string的比较:

除了刚才提到的等号及不等号的比较,c&#43;&#43;还提供了一个比较函数compare

s.compare(s2); //比较s和s2
s.compare(pos1,n1,s2);//s从pos1开始的n1个字符与s2比较
s.compare(pos1,n1,s2,pos2,n2);
//s从pos1开始的n1个字符与s2从pos2开始的n2个字符比较
s.compare(cp); //比较s和cp
s.compare(pos1,n1,cp); //s从pos1开始的n1个字符与cp比较
s.compare(pos1,n1,cp,n2); //s从pos1开始的n1个字符与cp的前n2个字符比较
//compare的返回值: >0 s大; <0 s小; &#61;0 二者相等


6.cctype提供的字符判断函数:

需要包含头文件: #include

 

总结一下C&#43;&#43;中string的操作&#xff0c;来自〈C&#43;&#43; Primer〉第四版。

1. string对象的定义和初始化:

string s1; //空串
string s2(s1); //将s2初始化为s1的一个副本
string s3("value"); //s3初始化并赋值
string s4(n,"c"); //s4初始化,赋值为n个&#39;c&#39;
string s5(b,e); //初始化s5为迭代器b,e范围内的副本
string s6(cp); //用c风格的字符串初始化
string s7(cp,n); //cp前n个元素的副本
string s8(s2,pos2); //s8为s2从pos2开始到结尾的副本
string s9(s2,pos2,len2);//同上,不过的长度为len2(不超过s2的长度)
//其中有一种方法需要注意:
char no_null[] &#61; {&#39;H&#39;,&#39;i&#39;};
string s10(no_null); //错误,不是以null结尾的串
string s10(no_null,2); //ok,可以自动添加null结尾

 

2. string的读写:

string s;
cin >> s;
cout << s << endl;
//注意,cin是会被空白符截断的
//要得到整行输入,采用while循环,或者:
getline(cin,s);

3.string的操作:

s.empty(); //判断s是否为空,相当于s.size()&#61;&#61;0
s.size(); //s的长度
s[n]; //n位置的字符(左值返回)
s1&#43;s2; //返回s1和s2连接的串
s1&#61;s2; //把s1替换为s2的副本
s1&#61;&#61;s2; //判断s1,s2是否相等
!&#61;,<,<&#61;,>,>&#61; //按字典顺序比较
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.insert(p,t); //在迭代器p指向的元素前插入t,返回指向t的迭代器
s.insert(p,n,t);//同上,插入n个t,返回void
s.insert(p,b,e);//插入迭代器b,e间的元素,返回void
s.insert(pos,n,c); //在pos前插入n个字符c,返回s的引用
s.insert(pos,s2);//在pos前插入s2,返回s的引用
s.insert(pos,s2,pos2,len);
//在pos前插入s2中从pos2开始的len个字符,返回s的引用
s.insert(pos,cp,len);
//pos前插入cp数组(c风格字串)的前len个字符,返回s的引用
s.insert(pos,cp);//在pos前插入cp,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.assign(b,e); //用b,e间的元素替换s,返回s
s.assign(n,t); //用n个t替换s,返回s
s.assign(s2); //用s2的副本替换s,返回s的引用
s.assign(s2,pos2,len);
//用s2从pos2开始的len长的副本替换s,返回s的引用
s.assign(cp,len)//用cp的前len个字符副本替换s,返回s的引用
s.assign(cp) //用cp的副本替换s,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.erase(p); //删除迭代器p指向的元素,返回指向后一个元素的迭代器
s.erase(b,e); //删除b,e间的元素,返回值同上
s.erase(pos,len);//删除从pos开始的len个字符,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.substr(pos,n);//返回s中从pos开始的n个字符组成的串
s.substr(pos); //返回s中从pos开始到结尾的串
s.substr(); //返回s的副本
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.append(args); //将args串接在s的后面,返回s的引用
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
s.replace(pos,len,args);
//删除s中从pos开始的len个字符,用args串替换,返回s的引用
//args不能为b2,e2
s.replace(b,e,args);
//删除迭代器b,e范围内的字符,用args替换,返回s的引用
//args不能为s2,pos2,len2
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;append,replace的args的说明
s2 //string
s2,pos2,len2 //s2中下pos2开始的len2个字符
cp //c风格的串
cp,len2 //cp指向以空结束的前len2个字符
n,c //字符c的n个副本
b2,e2 //迭代器b2,e2范围内的所有字符

4.string的查找操作:

s.find(args); //args的第一次出现
s.rfind(args); //最后一次出现
s.find_first_of(args);//args中任意字符的第一次出现
s.find_last_of(args);//args中任意字符的最后一次出现
s.find_first_not_of(args);//查找第一个不属于args的字符
s.find_last_not_of(args);//查找最后一个不属于args的字符
//&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;args
c,pos&#61;0 //查找字符c,默认从s的0位置开始
s2,pos&#61;0 //查找s2
cp,pos&#61;0 //查找cp(c风格字串)
cp,pos,n //从s的pos开始查找cp的前n个字符,没有默认值

5.string的比较:

除了刚才提到的等号及不等号的比较,c&#43;&#43;还提供了一个比较函数compare

s.compare(s2); //比较s和s2
s.compare(pos1,n1,s2);//s从pos1开始的n1个字符与s2比较
s.compare(pos1,n1,s2,pos2,n2);
//s从pos1开始的n1个字符与s2从pos2开始的n2个字符比较
s.compare(cp); //比较s和cp
s.compare(pos1,n1,cp); //s从pos1开始的n1个字符与cp比较
s.compare(pos1,n1,cp,n2); //s从pos1开始的n1个字符与cp的前n2个字符比较
//compare的返回值: >0 s大; <0 s小; &#61;0 二者相等

6.cctype提供的字符判断函数:

需要包含头文件: #include

isalnum(c); //true if c 是数字或字母
isalpha(c); //true if c 是字母
iscntrl(c); //true if c 是控制字符
isdigit(c); //true if c 是数字
isgraph(c); //true if c 不是空格但可打印
islower(c); //true if c 是标点符号
isprint(c); //true if c 是空白字符
ispunct(c); //true if c 是大写字母
isspace(c); //true if c 是空白字符
isupper(c); //true if c 是大写字符
isxdigit(c); //true if c 是十六进制数
tolower(c); //将c转换为小写
toupper(c); //将c转换为大写



推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
author-avatar
与人无缘-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有