C++学习笔记(七):string类用法及使用大全——在C++11下的使用详解
2015-01-04 14:28
447 查看
一、初始化:
在C++中,string是一个标准库类型,也就是说有了标准库,就可以使用string类。下面介绍一下string的初始化方式:string s1 默认初始化,s1是个空字符串;
string s2 = s1 s2是s1的一个副本
string s2(s1) 等价于s2 = s1
string s3 = “abcd” 赋字符串
string s3(“abcd”) 等价于 s3 = “abcd”
string s4(n,’a’) 把s4初始化为连续n个a组成的字符串例如 string s4(3,’a’),即s4 = “aaa”
除了以上的方式,还可以使用构造函数初始化,规则如下:
string s1( p ,n) s是p指向的数组中前n个字符串的copy。p是字符指针。此数组中至少有n个字符
string s2(s1,pos2) 从s1下标为pos2的位置copy。pos2应大于s1.size(),即大于s1的长度
string s3(s1,pos3,length) 从s1下标为pos3的位置copy长度为length的字符串。同样pos3应大于s1的长度不管。length值为多少,都只拷贝到s1结束
注意,此处的n,pos2,pos3,length都是无符号整型。
举例如下:
const char *p = “hello_world!!”; //以空字符结尾的数组
char str[] = {‘h’,’e’,’l’,’l’,’o’}; //不是以空字符结尾的数组
string s = “hello_world”;
string s1(p); //s1 = “hello_world!!”
string s2(str); //错误,str是个字符数组,不是字符串,不以空字符结尾,故会报错
string s3(str,2); //s3 = “he”
string s4(p+6,5); //s4 = “world”
string s5(s,6); //s5 = “world!!”
string s6(s,6,5); //s6 = “world”
string s7(s,6,30) //s7 = “world!!”
二、对string一些比较基本的操作:
cout<<s 将s输出cin>>s 输入字符串s,字符串以空白分隔、结束
getline(cin ,s) 读取一行输入的字符串,包括空格
s.empty() 判断s是否为空,空则返回true
s.size() 返回字符串的长度
s
返回字符串中第n个字符
s1+s2 返回s1,s2连接后的结果
s1 == s2 若两个字符串一样,则相等。
<, <=, >, >= 利用字符的编码比较大小
用法举例及注意事项如下:
1、cin>>s;在执行读取操作,string对象会自动忽略开头的空白(包括空格、换行、制表符等),从第一个真正的字符开始读取,直至遇到下一个空白。若输入“ hello world! ”则s = “hello”。若想读取包括空格在内的字符串,则可以使用getline获取整行的字符串。比如:getline(cin ,s)则s = “ hello world! ”。
2、s.size()的返回值是unsigned int ,若表达式中混用了带符号的数,那么后果可能是无法预测的。
3、关于字符串的比较,其对大小写是敏感的,且比较的依据是字符的ASCII的值的大小。比如string a = “hello”, b =”Hello”, c=”hello world”则字符串比较的结果为c>a>b。字符串的比较后面还会有用compare的介绍。
4、对于string对象的相加操作,要注意必须确保每个加法运算符(+)的两侧至少有一个是string变量。因为不能把一个字符串常量和一个字符串常量相加。比如:
string s = “abcd”;
string s1 = s + “ef”; //正确,s1 = “abcdef”
string s2 = “abcd”+”ef”; //错误,+两边的对象都不是string类型的
string s3 = s+”ef”+”hi”; //正确,s3 = “abcdefhi”
string s4 = “ef”+”hi”+s; //错误,因为运算的关系,导致此表达式是先将”ef”和”hi”相加,故错误
三、使用容器函数对string操作
1、修改string操作
s.substr(pos,n) 返回一个从s的pos开始长度为n的字符串。pos默认是0,n默认是s.size()-pos。故pos应小于s.size()s.insert(pos,args) 在pos之前插入args指定的字符。pos可以是一个下标或者迭代器。若是下标,则返回一个指向s的引用;若是迭代器,则返回指向第一个插入字符的迭代器
s.erase(pos,length) 删除从pos开始的length个字符。若length缺省,则删除整个字符串,返回一个指向s的引用
s.assign(args) 将s中的字符替换为args指定的内容。返回一个指向s的引用
s.append(args) 在s后加上args指定的内容。返回一个指向s的引用
s.replace(range ,args) 将s中范围为range内的字符换位args指定的内容。rang可以是下标加长度的形式,也可以是一对指向s的迭代器。返回一个指向s的引用。
上面的args情况比较复杂,下面做一下介绍:
args可以是以下的形式:
str | 字符串str |
str,pos,length | str中从pos开始最多length个字 |
cp | cp指向的以空字符结尾的字符数组 |
cp,len | 从cp指向的字符数组前length个字符 |
n,c | n个字符'c' |
b,e | 迭代器b和e指定范围内的字符 |
初始化列表 | 花括号包围的以逗号分隔的字符列表 |
关于replace和insert的情况列出如下:
函数名称 | replace | replace | insert | insert | args可以是 |
pos或range 的类型 | (pos,length,args) | (b,e,args) | (pos,args) | (iter,args) | |
√ | √ | √ | × | str | |
√ | × | √ | × | str,pos,length | |
√ | √ | √ | × | cp,length | |
√ | √ | × | × | cp | |
√ | √ | √ | √ | n,c | |
× | √ | × | √ | b,e | |
× | √ | × | √ | 初始化列表 |
2、搜索string的操作
string类提供了6个不同的搜索函数。每个操作都返回搜索结构位置下标。若搜索失败则返回-1。函数如下:s.find(args) | 查找s中args第一次出现的位置 |
s.rfind(args) | 查找s中args最后一次出现的位置 |
s.find_first_of(args) | 在s中查找args中任何一个字符第一次出现的位置 |
s.find_last_of(args) | 在s中查找args中任何一个字符最后一次出现的位置 |
s.find_first_not_of(args) | 在s中查找第一个不在args中的字符 |
s.find_last_not_of(args) | 在s中查找最后一个不在args中的字符 |
c,pos 从s中位置pos开始查找字符c。pos默认为0
s2,pos 从s中位置pos开始查找字符串s2.
cp,pos 从s中位置pos开始查找指针cp指向的以空字符结尾的字符串
cp,pos,n 从s中位置pos开始查找指针cp指向的数组前n个字符。pos和n无默认值
3、比较string的操作
在对string进行比较时,除了可以用前面介绍的关系运算符,还可以用compare函数,根据比较的结果是等于、大于、小于分别返回0,正数,负数。其形参内容如下:s2 | 比较s和s2 |
pos1,n,s2 | 将s中从pos1开始的n个字符与s2比较 |
pos1,n1,s2,pos,n2 | 将s中从pos1开始的n1个字符与s2中从pos2开始的n2 个字符比较 |
cp | 比较s与cp指向的以空字符结尾的字符数组 |
pos1,n,cp | 将s中从pos1开始的n个字符与cp指向的 以空字符结尾的字符数组 |
pos1,n1,cp,n2 | 将s中从pos1开始的n个字符与cp指向的 地址开始的n2个字符比较 |
四、对string中的单个字符操作
见下面博客:C++学习笔记(八)终于写完了,这里稍稍吐槽一下CSDN的博客编辑界面,这画表格太艰难了。。。。。。。累死我了。
相关文章推荐
- C++学习笔记之#pragma的使用用法
- 【学习笔记】C++中的string类详解
- Liunx 命令行与shell脚本编程大全 第五章学习笔记(Vim 编辑器使用详解 解释+图示)
- C++学习笔记之pimpl用法详解
- [学习笔记][C++Primer Plus]String类的使用
- C++ Data Structure 学习笔记 (2011.5.2)——Cin的用法详解以及文件的读取
- C++学习笔记---------基础知识sizeof用法
- C++学习笔记之1:使用相同形式的new和delete
- C++学习笔记(七)--联合/共用体(union)用法
- FreeBSD学习笔记18-pureftpd使用详解(2)-用shell用户或虚拟用户登录pureftpd
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- C++ Data Structure 学习笔记 (2011.5.3)——传值,指针,引用的区别及Vector与String的详细用法
- what's in string? c语言string类函数实现汇总 都是学习使用指针的好例子啊(算是读书摘抄和笔记吧)
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- Windows SDK学习笔记----Combo Box 用法大全(Backer原创)
- C++学习笔记——使用Visual Leak Detector检测内存泄漏
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- 智能指针auto_prt的使用(c++学习笔记)
- MFC学习笔记之:ListCtrl控件使用详解
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用