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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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的读写:

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

3.string的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
s.empty();    //判断s是否为空,相当于s.size()==0
s.size(); //s的长度
s[n]; //n位置的字符(左值返回)
s1+s2; //返回s1和s2连接的串
s1=s2; //把s1替换为s2的副本
s1==s2; //判断s1,s2是否相等
!=,<,<=,>,>= //按字典顺序比较
//==================
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的引用
//==================
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的引用
//==================
s.erase(p); //删除迭代器p指向的元素,返回指向后一个元素的迭代器
s.erase(b,e); //删除b,e间的元素,返回值同上
s.erase(pos,len);//删除从pos开始的len个字符,返回s的引用
//==================
s.substr(pos,n);//返回s中从pos开始的n个字符组成的串
s.substr(pos); //返回s中从pos开始到结尾的串
s.substr(); //返回s的副本
//==================
s.append(args); //将args串接在s的后面,返回s的引用
//==================
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
//==================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的查找操作:

1
2
3
4
5
6
7
8
9
10
11
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的字符
//=================args
c,pos=0 //查找字符c,默认从s的0位置开始
s2,pos=0 //查找s2
cp,pos=0 //查找cp(c风格字串)
cp,pos,n //从s的pos开始查找cp的前n个字符,没有默认值

5.string的比较:

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

1
2
3
4
5
6
7
8
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小; =0 二者相等

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

需要包含头文件: #include<cctype>

1
2
3
4
5
6
7
8
9
10
11
12
13
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转换为大写
 原文地址 http://pwwang.com/technology/c-c-plus-plus-technology/c%E6%A0%87%E5%87%86%E5%BA%93string%E7%B1%BB%E5
 
 

【转载】 C++ stl string 操作的更多相关文章

  1. [转载] C++ STL string的Copy-On-Write技术

    原文: http://coolshell.cn/articles/12199.html stl的string是经过严格优化的, 深入理解对以后编程过程中应用string非常有益处, 感谢左耳朵耗子的精 ...

  2. luogu题解P1032字串变换--BFS+STL:string骚操作

    题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...

  3. STL 常见操作

    stl的操作不是很熟练, 记录一下 1.vector: 排序: sort(vc.begin(),vc.end()); 去重: sort(vc.begin(),vc.end()); num.erase( ...

  4. 深入剖析 linux GCC 4.4 的 STL string

    转自: 深入剖析 linux GCC 4.4 的 STL string 本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Wri ...

  5. string操作

    常用的功能测试: #! -*- coding:utf-8 -*- import string s = 'Yes! This is a string' print '原字符串:' + s print ' ...

  6. 格式字符串分配stl::string

    代码非常easy,不解释,直接在代码: #include <cstdio> #include <cstdarg> #include <iostream> using ...

  7. 浅谈C++ STL string容器

    浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...

  8. C++标准模板库Stand Template Library(STL)简介与STL string类

    参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...

  9. 转C++之stl::string写时拷贝导致的问题

    前几天在开发某些数据结构到文件的 Dump 和 Load 功能的时候, 遇到的一个 bug . [问题复现] 问题主要出在 Load 过程中,从文件读取数据的时候, 直接使用 fread 的去操作 s ...

随机推荐

  1. [mybatis]Example的用法 标签: mybatis 2017-05-21 21:46 651人阅读 评论(11)

    Example类是什么? Example类指定如何构建一个动态的where子句. 表中的每个non-BLOB列可以被包括在where子句中. 例子是展示此类用法的最好方式. Example类可以用来生 ...

  2. hdu1233还是畅通工程

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 关于node中 require 和 ES6中export 、export default的总结

    nodejs中 require 方法的加载规则 方法的加载规则 1. 优先从缓存中加载 2. 核心模块 3. 路径形式的模块 4. 第三方模块 一.优先从缓存中加载 main.js:执行加载a.js模 ...

  4. http方式nginx 访问不带www的域名301重定向跳转到www的域名帮助seo集中权重

    比如我需要吧gucanhui.com重定向301跳转到www.gucanhui.com 需要在nginx的con发文件中加入一段 server { listen ; server_name gucan ...

  5. find()和find_all()的具体使用

    在我们学会了BeautifulSoup库的用法后,我们就可以使用这个库对HTML进行解析,从网页中提取我们需要的内容. 在BeautifulSoup 文档里,find().find_all()两者的定 ...

  6. JAVA邀请码生成器

    code import java.util.Random; /** * 邀请码生成器,算法原理:<br/> * 1) 获取id: 1127738 <br/> * 2) 使用自定 ...

  7. ucore os 前初始化

    BIOS 初始化完成说起 连接的时候指定了 -Ttext 0x7c00 也指定了 -e start 所以booasm.S 中的start 就呗钦定为程序入口了. 开始就是 屏蔽中断 初始化段寄存器 使 ...

  8. 【P1203】 【USACO1.1】坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

  9. spring boot 异常处理(转)

    spring boot在异常的处理中,默认实现了一个EmbeddedServletContainerCustomizer并定义了一个错误页面到"/error"中,在ErrorMvc ...

  10. 本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛

    摘要: 本地大数据服务是否进入消失倒计时?云平台大数据服务最终到底会趋向多云.混合云还是单一公有云?集群规模增大,上云成本将难以承受是误区还是事实?InfoQ 将就上述问题对阿里云智能通用计算平台负责 ...