string字符串:#include <string>

typedef basic_string<char> string;

1.string str("xxx");//在栈中隐士实例化string对象

2.string str = "xxx";

3.string str = string("xxx");//显示构造

4.string* str = new string("xxx");//在堆内存实例化对象

   delete str;

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=str3、str>str3、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章