0 概述
在C语言里,字符串是用字符数组来表示的,而对于应用层而言,会经常用到字符串,而继续使用字符数组,就使得效率非常低。所以在C++标准库里,通过类string从新自定义了字符串。头文件<string>
1 构造函数
C++11:
Specification | Constructor |
---|---|
default (1) | string(); |
copy (2) | string (const string& str); |
substring (3) | string (const string& str, size_t pos, size_t len = npos); |
from c-string (4) | string (const char* s); |
from buffer (5) | string (const char* s, size_t n); |
fill (6) | string (size_t n, char c); |
range (7) | template < class InputIterator > string (InputIterator first, InputIterator last); |
initializer list (8) | string (initializer_list il); |
move (9) | string (string&& str) noexcept; |
注:详细说明及示例代码参阅string
2 const char* c_str();
返回一个常量C字符串,内容与本string串相同。
注意:当本string
的内容改变,或被析构后,返回的字符串也不会被改变,因为返回的字符串是重新通过new char[]
出来.
参考下面代码,可以发现返回的C字符串地址和string
里的字符串地址完全不同:
string* str = new string("ASD"); //str="ASD"
const char* c = str->c_str();
cout<<c<<endl; //打印 : "ASD"
printf("&c[0]=%p,&str[0]=%p\n",&c[0],&str[0]);
//打印:c=0x94bf024,&str[0]=0x94bf008
str->append("dd"); //str="ASDdd"
cout<<c<<endl; //打印 : "ASD"
delete str; //调用析构
cout<<c<<endl; //打印 : "ASD"
注:详细说明、功能分析及示例代码参阅https://www.cnblogs.com/lifexy/p/8642163.html
3 reverse
头文件< algorithm >
中的reverse
提供了对string
对象的反转功能。
string str("hello");
reverse(str.begin(),str.end());
cout<< str <<endl; //反转自身字符串,打印olleh
注:详细说明、功能分析及示例代码参阅https://www.cnblogs.com/lifexy/p/8642163.html