函数名称 | 功能 | 函数说明 |
=, assign | 赋以新值 | 1、str1=str2:将str2赋值给str1; 2、assign(str2):复制str2。例:string str4; str4.assign(str3); 3、assign(str2,2,3):将str2的第2个字符开始的3个字符赋值。例:string str3; str3.assign(str2, 2, 3);如不添加第三个参数,默认为第N位后的所有的字符赋值给str3 4、assign(int n,char C):例:string str6; str6.assign(5, 'A');将str6赋值为5个A |
swap | 交换 | swap(str1,str2):交换str1和str2的值,例:string str1 = "AAA"; string str2 = "BBB" swap(str1, str2); |
+ =, append( ),push_back() | 添加字符 | 1、+=:将两个字符串相加并赋值为新的字符串。 2、append(str1),在字符串末尾添加str1,例:string str3 = "ABC "; str3.append(str1); 3、append(str1,n),在字符串末尾添加str1的前n位,例:string str4 = "ABCDE "; str4.append(str1,1); 4、append(str1,n1,n2),在字符串末尾添加str1的第n1位开始后的n2位,例:string str5 = "ABCDE "; str5.append(str1,2,3); 5、append(n,char),在字符串末尾添加n个字符,例:string str6 = "Hello "; str6.append(4, 'w'); 6、push_back(char),向字符串末尾添加单个字符,不能添加字符串,例:string str7 = "Hello "; str7.push_back('1'); |
insert () | 插入字符 | 1、string &insert(int p0, const char *s);——在p0位置插入字符串s 2、string &insert(int p0, const char *s, int n);——在p0位置插入字符串s的前n个字符 3、string &insert(int p0,const string &s);——在p0位置插入字符串s 4、string &insert(int p0,const string &s, int pos, int n);——在p0位置插入字符串s从pos开始的连续n个字符 5、string &insert(int p0, int n, char c);//在p0处插入n个字符c 6、iterator insert(iterator it, char c);//在it处插入字符c,返回插入后迭代器的位置 7、void insert(iterator it, const_iterator first, const_iteratorlast);//在it处插入从first开始至last-1的所有字符 8、void insert(iterator it, int n, char c);//在it处插入n个字符c |
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 () | 移除全部字符 | str.clear(),清空字符串 |
resize () | 改变字符数量 | str.resize(k,c);第一个参数为字符数,第二个为默认填充字符 |
replace() | 替换字符 | 1、用str替换指定字符串从起始位置pos开始长度为len的字符 string& replace (size_t pos, size_t len, const string& str); 2、用str替换 迭代器起始位置 和 结束位置 的字符 string& replace (const_iterator i1, const_iterator i2, const string& str); 3、用substr的指定子串(给定起始位置和长度)替换从指定位置上的字符串 string& replace (size_t pos, size_t len, const string& str, size_t subpos, size_t sublen); |
+ | 串联字符串 | str3=str1+str2 |
==,! =,<,<=,>,>=,compare() | 比较字符串内容 | 字符串比较是比较ASCII值 compare()比较字符串是否相等,相等返回0,不等返回-1 |
size(),length() | 返回字符数量 | length()只是用来获取字符串的长度 size()函数与length()函数作用相同,size()函数还可以获取vector类型的长度。 |
max_size () | 返回字符的最大可能个数 | max_size()函数:返回容器C可容纳的最多元素个数 |
empty () | 判断字符串是否为空 | empty()判断容器是否为空; |
capacity () | 返回重新分配之前的字符容量 | c.capacity()函数:返回容器c在需要重新分配更多存储空间之前能够存储的元素总数 |
reserve() | 保留内存以存储一定数量的字符 | c.reserve()函数:告诉容器c应该预留多少个元素的空间 |
[],at() | 存取单一字符 | 下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 '\0')是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 '\0'。 函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。 |
>>,getline() | 从 stream 中读取某值 | getline 可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。 getline 函数如下所示: getline(cin, inputLine); |
<< | 将值写入 stream | |
copy() | 将内容复制为一个 C - string | copy(v1.begin(), v1.begin() + 5, v2.begin()); 第一个参数为原容器起始迭代器,第二个参数为原容器结束迭代器,第三个参数为目标容器起始迭代器。 |
c_str() | 将内容以 C - string 形式返回 | ①因为c_str()返回的只是一个指向某字符串的指针,因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中 ② c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。 |
data() | 将内容以字符数组形式返回 | 与c_str一样,区别再说c_str是字符串,data()是数组 |
substr() | 返回子字符串 | s.substr();//返回s的全部内容 s.substr(11);//从索引11往后的子串 s.substr(5,6);//从索引5开始6个字符 |
find() rfind() | 搜寻某子字符串或字符 | 返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos。所有的函数的参数说明如下: |
begin( ),end() | 提供正向迭代器支持 | |
rbegin(),rend() | 提供逆向迭代器支持 | |
get_allocator() | 返回配置器 |
=,assign实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str) //打印字符串函数
{
cout << str << endl;
}
int main()
{
string str1 = "565feafeaeff";
string str2 = str1; //将str1赋值给str2
cout << "str2为:";
printstr(str2);
string str3;
str3.assign(str2, 2, 3); //将str2的第2位开始的后3位赋值给str3
cout << "str3为:";
printstr(str3);
string str4;
str4.assign(str3); //复制str3并赋值给str4
cout << "str4为:";
printstr(str4);
string str5;
str5.assign(str1, 3); //将str1的第3位开始后所有位赋值给str5
cout << "str5为:";
printstr(str5);
string str6;
str6.assign(5, 'A'); //将str6赋值为5个A
cout << "str6为:";
printstr(str6);
return 0;
}
swap实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str) //打印字符串函数
{
cout << str << endl;
}
int main()
{
string str1 = "AAA";
string str2 = "BBB";
swap(str1, str2);
cout << "str1为:";
printstr(str1);
cout << "str2为:";
printstr(str2);
return 0;
}
+ =,append( ),push_back() 实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str) //打印字符串函数
{
cout << str << endl;
}
int main()
{
string str1 = "abcde ";
string str2 = "12345 ";
str2 += str1; //str2+str1并赋值给str2
cout << "str2为:";
printstr(str2);
string str3 = "ABC ";
str3.append(str1); //在str3尾部加上str1
cout << "str3为:";
printstr(str3);
string str4 = "ABCDE ";
str4.append(str1,1); //在str4尾部加上str1的前1位
cout << "str4为:";
printstr(str4);
string str5 = "ABCDE ";
str5.append(str1,2,3); //在str5尾部加上str1的第2位开始的后的3位
cout << "str5为:";
printstr(str5);
string str6 = "Hello "; //在str6后加4个w
str6.append(4, 'w');
cout << "str6为:";
printstr(str6);
string str7 = "Hello "; //push_back只能向字符串末尾添加单个字符,不能添加字符串
str7.push_back('1');
cout << "str7为:";
printstr(str7);
return 0;
}
insert () 实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str)
{
cout << str << endl;
}
int main()
{
string str1 = "hello ";
string str2 = "world!";
str1.insert(2, str2); //在str1的第2位处插入str2
cout << "str1为";
printstr(str1);
string str3 = "hello ";
str3.insert(2, str2, 3); //在str3的第2位处插入str2的前3位
cout << "str3为";
printstr(str3);
string str4 = "hello ";
str4.insert(2, str2, 2, 2); //在str4的第2位处插入字符串str2的从2开始的连续2个字符
cout << "str4为";
printstr(str4);
string str5 = "hello ";
str5.insert(1, 5, 'O'); //在str5的第1位处插入5个O
cout << "str5为";
printstr(str5);
string str6 = "hello ";
string::iterator it = str6.insert(str6.end(), 'C'); //在str6的末尾处插入C,位置必须为迭代器,返回迭代器
cout << "str6为";
printstr(str6);
cout << "*it: " << *it << endl;
string str7 = "hello ";
str7.insert(str7.end(), str2.begin(), str2.end()); //在str7末尾处插入str2开始到结束的字符串
cout << "str7为";
printstr(str7);
return 0;
}
erase() 实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str)
{
cout << str << endl;
}
int main()
{
string str1 = "hello world!";
str1.erase(2, 2); //删除从第2位开始的2个字符
cout << "str1=";
printstr(str1);
string str2 = "hello world!";
str2.erase(str2.begin() + 2); //删除从第2位开始的字符
cout << "str2=";
printstr(str2);
string str3 = "hello world!";
str3.erase(str3.begin() + 2,str3.end()-3); //删除从第2位开始到倒数第3位的所有字符
cout << "str3=";
printstr(str3);
return 0;
}
replace 实例
#include <iostream>
#include <string>
using namespace std;
void printstr(string str)
{
cout << str << endl;
}
int main()
{
//用str替换指定字符串从起始位置pos开始长度为len的字符 string& replace(size_t pos, size_t len, const string & str);
string str1 = "he##llo world!";
str1.replace(2, 2, "你好");
cout << "str1=";
printstr(str1);
//用str替换 迭代器起始位置 和 结束位置 的字符 string& replace(const_iterator i1, const_iterator i2, const string & str);
string str2 = "he##llo world!";
str2.replace(str2.begin(), str2.begin()+5, "你好");
cout << "str2=";
printstr(str2);
// 用substr的指定子串(给定起始位置和长度)替换从指定位置上的字符串 string& replace(size_t pos, size_t len, const string & str, size_t subpos, size_t sublen);
string str3 = "he##llo world!";
string substr = "123";
str3.replace(2, 2,substr, substr.find("2"), 2);
cout << "str3=";
printstr(str3);
return 0;
}
compare 实例
#include <iostream>
#include <string>
using namespace std;
string str4 = "ABC";
string str5 = "ABC";
string str6 = "abc";
str4.compare(str5) == 0 ? cout << "str4与str5相等" << endl : cout << "str4与str5不相等" << endl;
str5.compare(str6) == 0 ? cout << "str5与str6相等" << endl : cout << "str5与str6不相等" << endl;
return 0;
}
copy 实例
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void myprint(int var) //打印容器内容
{
cout << var << " ";
}
void vectest()
{
vector<int> v1;
for (int i = 0; i < 10; i++) //给容器赋值0-9
{
v1.push_back(i);
}
vector<int> v2;
v2.resize(v1.size());
copy(v1.begin(), v1.begin() + 5, v2.begin());
for_each(v2.begin(), v2.end(), myprint); //遍历容器并打印
cout << endl;
}
int main()
{
vectest();
}
find()与erase() 综合实例
#include <iostream>
#include <string>
using namespace std;
int main()
{
//1.find找到空格位置;
//2.循环条件位置小于字符长度,删除第一个空格,查找第二个空格再删除
string str;
cout << "输入字符串:";
getline(cin, str);
int n = str.find((char)32);
while (n<str.length())
{
str.erase(n,1);
n = str.find((char)32);
}
cout << "str=" << str << endl;
return 0;
}