当前位置 博文首页 > android葱的博客:C++ STL—String
string 类的 string::npos 可同时定义字符串的最大长度,通常设置为无符号 int 的最大值。string 类包含了 6 个构造函数。string 类支持 cin 方式和 getline() 方式两种输入方式。简单示例如下:
string stuff;
cin >> stuff;
getline(cin, stuff);
上述三行代码,第一行是声明 string 类的对象 stuff,第二行是从屏幕读入输入的字符串,第三行同样实现第二行代码的功能。
函数名称 | 功能 | 示例 |
构造函数 | 产生或复制字符串 | string strs //生成空字符串 string s(num, c) //生成一个字符串,包含num个c字符 string s(str.begin(),str.end()); //复制字符串 str 的所有元素 |
析构函数 | 销毁字符串 | ~string() //销毁所有内存,释放内存 |
=,assign | 赋以新值 | stuff.assign("csc"); // "csc"替换原字符串的全部内容 stuff.assign("csc",1,2); // "csc"从1开始的2个字符替换原字符串? "sc" stuff.assign("csc",2); // "csc"的前2个字符替换原字符串? "cs" stuff.assign(5,'c'); //将原字符串替换为5个字符 |
Swap | 交换两个字符串的内容 | swap (str, str2); str.swap (str2); |
+=,append( ),push_back() | 添加字符 |
|
insert () | 插入字符 | A = “ello” ? B = “H" B.insert(0,A); // “elloH" ? ? ?B.insert(1,A); ?// “Hello" B.insert(1,A,3); // “Ho” B.insert(1,A,1,2) // “Hll” B.insert (1 , 5 , 'C’); // “?HCCCCC” string::iterator it = B.begin() + 1; |
erase() | 删除字符 | (1)erase( pos, n); 删除从pos开始的n个字符,例如erase( 0, 1),删除0位置的一个字符,即删除第一个字符 (2)erase( position); 删除position处的一个字符(position是个string类型的迭代器) (3)erase(first,last);删除从first到last之间的字符,(first和last都是迭代器) |
clear () | 移除全部字符 | ? |
resize () | 改变字符数量 | 调整容器中有效数据区域的尺寸,如果尺寸变小,原来数据多余的截掉。若尺寸变大,不够的数据用该函数第二个参数填充,影响size。 ? ?str.resize(10,'b'); |
replace() | 替换字符 | string A("Hello”); ? string B("word”); B.replace(2,1,A); ?//“woHellod" B.replace(2,1,A,2); ?//“wollod" B.replace(2,1,A,2,2); //“wolld"
|
+ | 串联字符串 | ? |
==,!?=,<,<=,>,>=,compare() | 比较字符串内容 | 如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。 ?A = “aBcdef” ? ? B = “AbcdEf" intm=A.compare(B);//完整的A和B的比较 int?p=A.compare(1,5,B,4,2);//"Bcdef"和"Ef"比较 |
size(),length() | 返回字符数量 |
|
max_size () | 返回字符的最大可能个数 | ? |
empty () | 判断字符串是否为空 | ? |
capacity () | 返回重新分配之前的字符容量 | ? |
reserve() | 保留内存以存储一定数量的字符 | 调用该函数可以为 string 类型对象重新分配内存。重新分配的大小由其参数决定。reserve() 的默认参数为 0。为容器预留足够的空间,避免不必要的重复分配,分配空间大于等于函数的参数,影响capacity。 |
[],at() | 存取单一字符 |
|
>>,getline() | 从 stream 中读取某值 | string stuff; cin >> stuff; getline(cin, stuff); |
<< | 将值写入 stream | getline(cin, s1); ? //?第 1 个参数是输入流,第 2 个参数保存输入的字符串. getline(cin, s2, '?‘); ?//?“hello csc” ?s2 = hello ?第 3 个参数指定分界符。 |
copy() | 将内容复制为一个 C - string | ? |
c_str() | 将内容以 C - string 形式返回 | 生成一个const char*指针,指向一个临时数组。? |
data() | 将内容以字符数组形式返回 | |
substr() | 返回子字符串 | s.substr(pos, n) ?//返回一个string,包含s中从pos开始的n个字符的拷贝, pos默认为0,n默认为s.size() - pos。 |
find() | 搜寻某子字符串或字符 |
|
begin( ),end() | 提供正向迭代器支持 | ? |
rbegin(),rend() | 提供逆向迭代器支持 | ? |
get_allocator() | 返回配置器 | ? |
最后一个有趣的东西
string B("abcd");
B = "ef";
cout << B.size() << endl; // 2
cout << B << endl; //ef
cout << B[2] << endl; // '/0'
cout << B[3] << endl; // d
?
string和数值类型转换
c++11提供了to_string方法,可以方便的将各种数值类型转换为 字符串类型:
std::string to_string(int value);
std::string to_string(long int value);
std::string to_string(long long int value);
std::string to_string(unsigned int value);
std::string to_string(unsigned long long int value);
std::string to_string(float value);
std::string to_string(double value);
?
std::wstring to_wstring(int value);
。。。。。。。。。。。。。。。
?还提供了sto...方法,将string转换为各种类型的数据:
std::string str = "1000";
int val = std::stoi(str);
long val = std::stol(str);
float val = std::stof(str);
?c++11还提供了字符串(char*)转换为整数和浮点类型的方法:
atoi: 将字符串转换为 int
atol: 将字符串转换为long
atoll:将字符串转换为 long long
atof: 将字符串转换为浮点数
?to_string 的一个小应用
//十进制转二进制 —— string实现
string dectobin1(const int& n){
int a = n;
string s;
while(a){
s = to_string(a%2) + s;
a >>= 1;
}
return s;
}
后面还有栈(stack)实现的十进制转化为二进制STL——stack
string的小实用工具:模拟java中的split函数——字符串分割
cs