string初始化
int main()
{
using std::string;
string str1;
string str2(5,'c');
string str3("now the time");
string str4(str3,4,6);
string str5("abcdd",2);
std::cout << str1 << std::endl; //空
std::cout << str2 << std::endl; //ccccc
std::cout << str3 << std::endl; //now the time
std::cout << str4 << std::endl; //the ti
std::cout << str5 << std::endl; //ab
return 0;
}
append(从末尾添加文本)
string str = "whatareyoudoing";
string str1 = str.append("111");
string str2 = str.append(str1);
string str3 = str.append(str1,5,6);
string str4 = str.append("helloworld",8);
string str5 = str.append(4,'c');
assign(赋值)
string str = "whatareyoudoing";
string str1 = str.assign(str,5,6);
string str2 = str.assign("helloworld",8);
string str3 = str.assign("111");
string str4 = str.assign(str1);
string str5 = str.assign(4,'c');
at(取得某个位置的字符)
//at中的数字不能超过str的字符数-1
std::cout << str.at(20) << std::endl;
begin,end(迭代器)
相当于一个指针,str.begin()指向字符串的第一个字符,str.end()指向字符串最后一个字符的后一个字符。
string::iterator aaa;
for(aaa=str.begin();aaa!=str.end();aaa++)
{
std::cout << *aaa << std::endl;
}
c_str()
使字符串编程符合C标准的字符串,格式为const char *;
const char * a;
a = str.c_str();
std::cout << a << std::endl;
//或者将c_str()强制转换成(char *)
char * a;
a = (char *)str.c_str();
std::cout << a << std::endl;
注意:上面的a只是一个指针,被c_str()赋值后也还是一个指针,不会变成一个字符串常量。
capacity(容量大小)
capacity()函数返回在重新申请更多的空间前字符串可以容纳的字符数. 这个数字至少与 size()一样大,和length也一样大
compare(比较)
简单的用法,用返回值大于0,等于0,小于0来做判断。但是返回值是一个具体数字,具体规律不详。只知道,没隔一个数字会重新计数。
string a = "abcd5d";
string b = "abcd2d";
std::cout << a.compare(b) << std::endl;
data(返回指向自己第一个字符的指针)
string a = "abcd5d";
const char * b = a.data();
std::cout << *b << std::endl;
empty()判断是否为空
string a = "abcd5d";
string b = "";
std::cout << a.empty() << std::endl;
std::cout << b.empty() << std::endl;
erase(删除)
string a = "abcd5d";
a.erase(); //删除全部
a.erase(2); //删除第二个后面的所有
a.erase(2,1); //产出第二个后面的一个
find(查找)
string a = "abcd5";
const char * b = "cd";
//a.find('d',4);
std::cout << a.find(b,0) << std::endl;
find_first_of,find_first_not_of,find_last_of,find_last_not_of
string a = "abcd5";
const char * b = "cda";
std::cout << a.find_first_of(b,0) << std::endl;
insert(插入)
string a = "abcd";
string b = "efghijk";
string c;
//c = a.insert(2, 2, '6');
//c = a.insert(2, "1234");
//c = a.insert(2, "1234", 2);
//c = a.insert(2, b);
//c = a.insert(2, b, 3, 4);
std::cout << c << std::endl;
length(长度)
和size()大小一样
rbegin和rend(逆向迭代器)
replace(替换)
//a.replace(2,3,"123");
//a.replace(2,3,"12345",2,2); //用后面字符串的2个字符替换a中的3个字符
//a.replace(2,3,b);
//a.replace(2,3,b,2,2);
//a.replace(2,3,"1234",2);
//a.replace(2,3,3,'0');
reserve和capacity对应
表示当前的容量最多能容纳多少。一般在处理内容较多的时候,如果capacity较小,在插入和删除时,当达到零界点时,会重新改变容量,会浪费很大的资源。所以我们一般都先定义比较大的capacity,就不必考虑开销了。
resize(大小)
string a = "abcdefg";
a.resize(5,'a');
//a.resize(5);
//如果resize中的值小于a.size,则a会取前5个值
//如果resize中的值大于a.size,则多出来的空间会填充a
rfind(返回最后一个匹配的位置)
和find对应
substr(返回一个子串)
b = a.substr(2,5);
//b是a的返回值,a中的数据不会变
swap(交换字符串)
a.swap(b);