目录
1,insert
2,erase
3,find
4,replace
5,rfind
6,substr
7,find_first_of
8,find_first_not_of
9,find_last_of
10,operator+
11,getline
1,insert
在 pos 位置之前插入字符串
#include<iostream>#include<string>using namespace std;int main(){string s1("hello world");s1.insert(0, "xx");cout << s1 << endl;s1.insert(0,2,'y');cout << s1 << endl;s1.insert(s1.begin(),'z');cout << s1 << endl;string s2("iiiiiiiiii");s1.insert(0,s2, 5);cout << s1 << endl;return 0;} 2,erase擦除范围字符串
int main(){string s1("hello world");s1.erase(5, 4);cout << s1 << endl;s1.erase(1);cout << s1 << endl;return 0;} 3,find int main(){string s1("hello world");size_t pos = s1.find('l',0);cout << s1[pos] << endl;pos = s1.find("ll", 1);cout << pos << endl;return 0;} 4,replace从 pos 位置开始,用 n 个字符替换;
int main(){string s1("hello world");s1.replace(0, 2, "xx");cout << s1 << endl;s1.replace(0, 5,"yyy");cout << s1 << endl;return 0;}上述可以看到,第一个替换从下标 0 开始用两个字符也就是 ” he “ 替换 “ xx ” ;
第二个替换是从下标 0 开始用5个字符也就是 “ hello ” 替换 “ yyy ”;
给大家写一个替换字符的题目
将字符串中的空格都替换成其他字符串
int main(){string s1("hello world hello bit");size_t pos = s1.find(" ", 0);while (pos != string::npos){s1.replace(pos, 1, "%20");pos = s1.find(" ", pos + 3);}cout << s1 << endl;return 0;}查找字符然后进行替换,然后在查找再替换直到查找不到为止退出;
5,rfind从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
int main(){string s1("hello world");size_t pos = s1.rfind('l',3);cout << pos << endl;pos = s1.rfind('l', 10);cout << pos << endl;pos = s1.rfind('o');cout << pos << endl;pos = s1.find("l");cout << pos << endl;pos = s1.rfind("l");cout << pos << endl;return 0;} 6,substr在 str 中从 pos 位置开始,截取 n 个字符,然后将其返回
int main(){string s1("hello world");string s2=s1.substr(2, 3);cout << s2 << endl;string s3 = s1.substr(0);cout << s3 << endl;return 0;}我们再写一个查找后缀的程序;
int main(){string s1("test.cpp");string s2("code.jbp");size_t pos = s1.rfind('.');if(pos != string::npos){string buff = s1.substr(pos);cout << buff << endl;}pos = s2.rfind('.');if(pos != string::npos){string buff = s2.substr(pos);cout << buff << endl;}return 0;}我们再写一个分离字符串的小程序
int main(){string str("https://legacy.cplusplus.com/reference/string/string/substr/");size_t pos = str.find(':');string buff = str.substr(0, pos+1);cout << buff << endl;size_t pos1 = str.find('/',pos+3);buff = str.substr(pos + 1, pos1-pos);cout << buff << endl;size_t pos2 = str.rfind('/');buff = str.substr(pos1 + 1, pos2-pos1);cout << buff << endl;return 0;} 7,find_first_of直接看代码兄弟们
int main(){string str("Please, replace the vowels in this sentence by asterisks.");size_t pos = str.find_first_of("abc");while (pos != string::npos){str.replace(pos, 1,"*");pos = str.find_first_of("abc",pos);}cout << str << endl;return 0;} 8,find_first_not_of与 find_first_of 功能相反,返回不属于字符串的下标
int main(){string str("Please, replace the vowels in this sentence by asterisks.");size_t pos = str.find_first_not_of("abc");while (pos != string::npos){str.replace(pos, 1,"*");pos = str.find_first_not_of("abc",pos+1);}cout << str << endl;return 0;} 9,find_last_of跟 find_first_of 类似,只不过 find_last_of 是从后往前找的;
来个例子:
void SplitFilename(const std::string& str){std::cout << "Splitting: " << str << '\n';std::size_t found = str.find_last_of("/\\");std::cout << " path: " << str.substr(0, found) << '\n';std::cout << " file: " << str.substr(found + 1) << '\n';}int main(){std::string str1("/usr/bin/man");std::string str2("c:\\windows\\winhelp.exe");SplitFilename(str1);SplitFilename(str2);return 0;} 10,operator+ int main(){string s1("hello world");string s2("abcdefg");string s3 = s1 + s2;cout << s3 << endl;s1 = s2 + "666";cout << s1 << endl;s2 = "999" + s2;cout << s2 << endl;return 0;} 11,getline我们正常的输入是使用 cin
int main(){string s1;//我们输入 hello worldcin >> s1;cout << s1 << endl;return 0;}但是 cin 遇到空格就会停下来,所以我们引入了 getline ;
int main(){string s1;getline(cin, s1);cout << s1 << endl;cout << endl;//我们输入 hello worldcin >> s1;cout << s1 << endl;return 0;}