typedef basic_string<char> string;c++
1.string str("xxx");//在栈中隐士实例化string对象数组
2.string str = "xxx";app
3.string str = string("xxx");//显示构造ide
4.string* str = new string("xxx");//在堆内存实例化对象函数
delete str;spa
5.string str;//空串不会显示任何内容指针
string str(""/*注意不能接受NULL指针*/);//同上对象
string str(pStr ? "" : pStr);内存
6.从c --> c++字符串
char cStr[] = "xxx";
string str(cStr);
7.从c++ --> c
const char* str2 = str.c_str();//将字符串的首地址变为const类型字符串的指针
8.string的操做符重载:
str+str、str+=str、str=str三、str>str三、str==str3......
= + += > >= < <= == !=
9.string函数:注意下标都从0开始
(1)str.size()//字符串的缓冲区大小,不包含\0
(2)str.length()//获取元素个数,不包含\0
(3)str.resize(5);//将字符串缓冲区大小设置为5,若是多了则截断,若是少了所有补'\0'.
(4)str+="xxxxxx";//若是str自己后面有'\0'那么,所加字符串添加到后面,输出str的结果到'\0'截止,即后面加的字符串不会输出。
可是缓冲区的大小加了所加字符串的长度
(5)str.compare(str2);//比较字符串的大小
1:str > str2
0:str = str2
-1:str < str2
(6)str.append(str2);//将str2拼接到str后面
str.append(str2, n, m);//从str2字符串的第n个(下标从0开始)开始的m个字符拼接到str后面
如:string str1("hello");string str2("the world !");str1.append(str2, 4, 5);结果:helloworld
(7)str.at(index) == str[index]
相同的是下标都从0开始
不一样的是 [] 没有检查数组越界(取出来未知值),而at检查是否越界访问,并抛出out_of_range& ex异常
(8)str.find(str2);//在str中查找str2,若是找到就返回str2在str1中开始位置的下标(下标类型为:string::size_type)
若是下标值等于:string::npos(全局变量),那么表示到了str1结尾
(9)str.insert(pos, str2);//在下标为pos的位置插入str2
另一个版本:str.insert(pos, str2, n, m);//在下标为pos的位置插入m个字符, 从str2的第n个字符开始(开始下标为0)
(10)str.erase(pos, n);//从下标为pos的地方开始删除n个字符
(11)pos = str.find_first_of(str2, pos);//在str中找到第一个字符,这个字符能和str2中任何一个字符匹配,并返回这个字符在str1中的下标
不然返回npos(文件结尾)
(12)相似拷贝构造函数和获取子串
string str2(str1, pos, n);//在str1中从pos下标处开始的n个字符截取做为参数构造str2
str2 = str1.substr(pos, n);//在str1中从pos下标开始截取n个字符赋值给str2
(13)str1.replace(pos, size, str2);//将str1的pos下标处开始size个字符替换为str2,str1的长度可能随str2的长度变化
string str1 ("123456789abcdefghtr");
str1.replace (9, 2, "hello");
123456789hellocdefghtr