C++ string 详细用法
string不是STL的容器(知道这一点的时候我也很吃惊),但是它与STL容器有着很多相似的操作,不需要担心长度问题,还封装了多种多样的方法,十分好用。
用到的库
#include <string>
声明
最基本:
string str;
这是声明了一个空字符串
还有其他多种方法:
- string s; // 生成一个空字符串s
- string s(str) ; // 拷贝构造函数生成str的复制品
- string s(str, stridx); // 将字符串str内"始于位置stridx"的部分当作字符串的初值
- string s(str, stridx, strlen) ; // 将字符串str内"始于stridx且长度顶多strlen"的部分作为字符串的初值
- string s(cstr) ; // 将C字符串(以NULL结束)作为s的初值
- string s(chars, chars_len) ; // 将C字符串前chars_len个字符作为字符串s的初值。
- string s(num, ‘c’) ; // 生成一个字符串,包含num个c字符
- string s(“value”); string s=“value”; // 将s初始化为一个字符串字面值副本
- string s(begin, end); // 以区间begin/end(不包含end)内的字符作为字符串s的初值
- s.~string(); //销毁所有字符,释放内存
我写了一个示例,便于理解:
#include<bits/stdc++.h> using namespace std; int main(){
int n,i;
char cstr[]="cstr";
string str1="qwertyui";
string str2(str1);
string str3(str1,);
string str4(str1,,);
string str5(cstr);
string str6(cstr,);
string str7(,'a');
string str8("zxcv");
string str9(str1.begin(),str1.end());
cout<<str1<<endl<<str2<<endl<<str3<<endl<<str4<<endl<<str5<<endl<<str6<<endl<<str7<<endl<<str8<<endl<<str9<<endl;
str1.~string(); }
运行结果如下:
qwertyui
qwertyui
wertyui
we
cstr
cs
aaaaa
zxcv
qwertyui
与C字符数组的比较
网上说了一大堆,我感觉最直接的区别,是如果s有三个字符,传统C的字符串的s[3]是’\0’字符,但是C++的string则是只到s[2]这个字符而已。
具体不同的用法 上图:
可以看到string在赋值、拼接还有比较等方面都更方便。
string对象的操作
string s;
) s.empty(); // s为空串 返回true
) s.size(); // 返回s中字符个数 类型应为:string::size_type
) s[n]; // 从0开始相当于下标访问
) s1+s2; // 把s1和s2连接成新串 返回新串
) s1=s2; // 把s1替换为s2的副本
) v1==v2; // 比较,相等返回true
) `!=, <, <=, >, >=` 惯有操作 任何一个大写字母都小于任意的小写字母
当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的:
string s1(“hello”);
string s3=s1+”world”; //合法操作
string s4=”hello”+”world”; //非法操作:两个字符串字面值相加
string 函数
) =, s.assign() // 赋以新值
) swap() // 交换两个字符串的内容
) +=, s.append(), s.push_back() // 在尾部添加字符
) s.insert() // 插入字符
) s.erase() // 删除字符
) s.clear() // 删除全部字符
) s.replace() // 替换字符
) + // 串联字符串
) ==,!=,<,<=,>,>=,compare() // 比较字符串
) size(),length() // 返回字符数量
) max_size() // 返回字符的可能最大个数
) s.empty() // 判断字符串是否为空
) s.capacity() // 返回重新分配之前的字符容量
) reserve() // 保留一定量内存以容纳一定数量的字符
) [ ], at() // 存取单一字符
) >>,getline() // 从stream读取某值
) << // 将谋值写入stream
) copy() // 将某值赋值为一个C_string
) c_str() // 返回一个指向正规C字符串(C_string)的指针 内容与本string串相同 有’\0’
) data() // 将内容以字符数组形式返回 无’\0’
) s.substr() // 返回某个子字符串
) begin() end() // 提供类似STL的迭代器支持
) rbegin() rend() // 逆向迭代器
) get_allocator() // 返回配置器
插入字符
也许你需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引的后面。
s.insert(0,”my name”);
s.insert(1,str);
这种形式的insert()函数不支持传入单个字符,这时的单个字符必须写成字符串形式。为了插入单个字符,insert()函数提供了两个对插入单个字符操作的重载函数:
insert(size_type index, size_type num, chart c)和insert(iterator pos, size_type num, chart c)。
其中size_type是无符号整数,iterator是char*,所以,你这么调用insert函数是不行的:
insert(0, 1, ‘j’);这时候第一个参数将转换成哪一个呢?
所以你必须这么写:insert((string::size_type)0, 1, ‘j’)!
第二种形式指出了使用迭代器安插字符的形式。
提取子串s.substr()
s.substr(); // 返回s的全部内容
s.substr(); // 从索引11往后的子串
s.substr(,); // 从索引5开始6个字符
string到int的转换
int n=;
str1="";
stringstream stream;
stream<<str1;
stream>>n;
cout<<n<<endl;
参考 :
https://blog.csdn.net/manonghouyiming/article/details/79827040
最新文章
- MongoDB基础知识
- CDATA为何物?
- java删除被占用的文件
- ubuntu如何卸载apt-get install安装的软件
- [Android Studio 权威教程]断点调试和高级调试
- 南阳acm奇偶数分离
- API内部文件读取
- 分布式文件系统FastDFS动态扩容
- 记一次sqoop同步到mysql
- 算法01 C语言设计
- POJ2947-Widget Factory
- tomcat版本号隐藏或修改
- oracle数据库相关概念介绍
- c#通过反射移除所有事件
- 解决SecureCRT超时自动断开的问题
- C++报错集锦
- pthread_setschedparam
- 虚拟机桥接网卡下配置centOS静态IP
- 1-3 Sass 语法、编译、调试
- linux 下多版本gcc 共存问题