校招知识点总结C++(二) string
字符串的问题现在是真的多,c++ string库很强大,但一直对里面的函数不太理解,所以这次总结下string库函数。
一、string中和其他类型的转换
1.和C-风格的字符串之间的转换。
string str = "abc"; const char * =str.c_str()
需要注意的是,这个返回的是const 类型,如果需要进行转换,需要c++中新出的const_cast来进行转换成非常量指针。socket中发送数据中,经常用到这个函数。
const char * s = "hello,world";
char d[] = "hello,world";
string str(s);
string str1(d);
cout<<str.length()<<str1.length();
cout<< sizeof(d)<<endl;
这个需要注意C-风格字符串和string不同的地方。C-风格多个'\0';
2.和int、double、long、float转换。
最开始:atoi(const char *) atol() atof().这些函数参数都是cost char *。
还有一个利用头文件#include<sstream>.这个用来处理空格好点。处理类型转换,差点意思。
c++11 新增:stoi(string) stol(string).是string。
反方向转换:to_string()函数。常用。
二、string 长度 成员函数。
string str ="afdfd"; str.length(); str.size();
三、string 查找 成员函数。
1.查找子串,根据子串,返回下标。
string str = "hello,world"; cout<<str.find("w")<<endl; cout<<str.rfind("w")<<endl; cout<<str.find("l")<<endl; cout<<str.rfind("l")<<endl;
2.截取子串,根据下标,返回子串。
string str = "hello,world"; cout<<str.substr(2,5)<<endl;
需要注意的这个sustr返回的不是一个引用,即返回的是一个右值,不是改变str本身。
四、string 修改(不用迭代器,虽然string也是STL中,也可以用迭代器,但目前对迭代器了解并不深,为防止出错,暂时不用。)
注意的一点,这些修改的成员函数都是返回的引用,即直接改变str,返回引用,意味着只能做左值。
1.erase
cout<<str.erase(9)<<endl;// pos 直到最后 cout<<str.erase(0,3)<<endl; //pos n
2.insert
cout<<str.insert(1,"strat")<<endl; cout<<str.insert(1,"strat",2)<<endl;//和replace相同
3.replace
cout<<str.replace(0,1,"huya");// pos n temp
cout<<str.replace(0,1,"huya",2)<<endl;// pos n temp n1 n1代表这个替换的字符串的 字符个数
cout<<str.replace(0,str.length(),"hahahhaadfdfdaf")<<endl; //猜一下,这个我想用来实验什么
cout<<str.replace(0,str.length()+100,"hahahhaadfdfdaf")<<endl;
cout<<str.length()<<endl;
4.append、push_back.
cout<<str.append("end")<<endl; str.push_back('l'); //注意只能添加字符,而且返回的不是引用,无法直接输出。 cout<<str<<endl;
五、string 比较
1.两个string直接比较。>= <= ==
2.compare 函数。逐个字符比较,大于返回1,等于返回0,小于返回-1; 从
string str2 = "abcdef"; string str3 = "abecdefg"; string str4 = "adfc"; string str5 = "abc,"; cout<<str2.compare(str3)<<endl; cout<<str2.compare(str4)<<endl; cout<<str2.compare(str5)<<endl;