1、专门的字符串操作类
2、与char 的区别,string是一个类,将对字符串的操作封装起来,操作更灵活,使用的时候不用考虑
内存的分配和释放,不用担心越界崩溃,底层使用new申请空间
3、头文件是c++中的类,而<string.h>是C语言中处理字符串的头文件
4、构造
1)、string str;
2)、string str1(“abcdefg”);
3)、string str2(5,‘a’); str2为5个a,即,aaaaa
4)、string str3(“abcdefg”,3); 为abc即常量的前三个初始化
5)、string str3(str1,3); 为defg,用str1的第3个至结束初始化
6)、string str4(str1,2,5); 为cdefg,用str1的0,1,2,第2个元素起,共5个字符初始化
7)、string str5(str1); 为拷贝构造,为abcdefg
8)、string str6=“ffffff”; 也可
9)、str3 = str1; //相当于复制
5、str.empty() 判断str是否为空,为空返回1,否则0;
6、属性
1)、容量:str.capacity();空的为15. //在定义一个string时,若字符个数小于等于15时,会申请15个
超出该范围时,根据编译器而定,一般会申请一个block
2)、str.reserve(16):修改容量,不能使容量变小只能变大,增加多少,也取决于编译器,一般一个block
3)、str.length(); 字符串长度
4)、str.size(); 字符个数,与上一个功能一样
5)、str1.resize(3); 重新设置字符个数,容量不变,其结果为"abc",即截断字符串,但defg会删除
7、输出
1)、cout << “str1:” << str1 << endl; //应用重载运算符
2)、cout << str1.c_str() << endl; //函数c_str()会返回str1的首地址,与上一个效果一样
3)、cout << “str1[1]:” << str1[1] << endl; 输出b,不可越界访问
4)、cout << “str1.at(2):” << str1.at(2) << endl; 输出c,不可越界访问
8、修改
1)、str1[1] = ‘z’;
2)、str1.at(2) = ‘z’;
9、插入 string str1(“abcdefg”);
1)、str1.insert(0,3,‘z’); //zzzabcdefg,在开始的位置插入3个z
2)、str1.insert(3,"-hello-"); str1:abc-hello-defg
3)、str1.insert(0,“ssss”,2); ssabcdefg
4)、str1.insert(2,str2); 同2
5)、str1.insert(2,str1,3,2); abdecdefg
6)、str1 = str1 + str2; //拼接
7)、str1.append(str2); //同上
8)、str1.append(str2,2,3); 拼接str2[2]–往后共三个字符
9)、str1.append(5, ‘.’); //后拼接5个点
10)、str1.insert(str1); //错误,没有重构
##########################################################################################
1、string :: iterator p1 = str1.begin(); cout << p1 << endl; //迭代器
2、
string str1(“abcdefg”);
const char a ;
char b;
a= str1.c_str();
strcpy(b,a);
b[2] =‘z’;
str1.c_str();通过string类的c_str()函数能够把string对象转换成c中的字符串的样式;操作c_str()函数的返回
值时,只能使用c字符串的操作函数,如:strcpy()等函数 。其的返回结果只能赋值给const char ,要想对该字符
串操作,需再赋值给非const 变量但并不操作str1本身
##########################################################################################
10、比较 string str1(“abc”); string str2(“abd”);
1)、cout << (str1 > str2) << endl; //输出0 ,一定要上括号
2)、cout << (str1 == str2) << endl; //输出0
3)、cout << (str1 < str2) << endl; //输出1 //真为1,假为0 ,不同编译器结果可能不同
4)、cout << str1.compare(str2) << endl; //str1 大于str2时返回1,小于时返回-1,相等时返回0
5)、cout << str1.compare(“abb”) << endl; //输出1
6)、cout << str1.compare(3,3,str2) << endl; //str1(“abcabd”); str2(“abc”);,截取str1[3]及以后3个和str2比较
7)、cout << str1.compare(3,3,str2,3,3) << endl; //str1(“abcabd”); str2(“abcabc”);对两字符串分别截取比较
11、查找 str1(“abcdefg”); str2(“efg”);
1)、cout << (int)str1.find(str2); //返回4 //其会返回无符号整数,所以需要类型转换成有符号的,若找不到会返回-1
2)、cout << (int)str1.find(str2,3); //同上,只不过从str1的str1[3]开始往后找
3)、cout << (int)str1.find(“efg”,3); //同上,为寻找字符串
4)、cout << (int)str1.find(‘e’,3); //为寻找字符
12、其他 str1(“abcdefg”); str2(“efg”);
1)、cout << str1.substr(2,3) << endl; //截取,输出cde
2)、str1.swap(str2); cout << str1 << endl; //交换两个字符串
13、迭代器 str1(“abcdefg”); 其是指是指针,可使用it 或 it[2] 来访问元素,也可修改
1)、string :: iterator it; //定义,相当于char 的指针,指向字符串中的一个字符
2)、it=str1.begin(); 返回str1的首地址,即str1.begin()结果为a
3)、str1.end(); //注意:其返回最后一个元素的下一个位置
4)、***若进行str1.append(18,‘a’);时,因为一开始申请的空间不够,给函数,实际是重新申请空间,因此
原有的迭代器会失效,此时是应it=str1.begin(); ,对迭代器重新赋值,方可继续使用
5)、str1.erase((it+1),str1.end()); //删除某些字符
6)、str1.insert(it,5,’.’); //也可使用迭代器插入字符
14、算法for_each和sort() str(“abcdefg”); //遍历str,使用需要#include ,其只是遍历,不会修改str本身
1)、for_each(str.begin(),str.end(),fun_cout);//其中fun_cout为自定义的函数,参数必须为char c,注意不能写成fun_cout()
2)、sort(str.begin(),str.end()); //排序,默认从小到大
3)、sort(str.begin(),str.end(),greater()); //从大到小,其中greater()为仿函数,<>根据排序的对象切换,
注意后有括号,与上区别,用greater时有时候需要#include
STL学习笔记(二)——string
最新推荐文章于 2021-08-23 20:54:39 发布