目录
string类对象的修改操作
1.push back ;append;operator+=
2.assign;insert
3.erase;replace
4.rfind
5.substr
6.c_str
补充
1.reverse(逆置 反转)
2.Sort
string类对象的修改操作
1.push back ;append;operator+=
push back:在字符串后尾插字符c
append:在字符串后追加一个字符串
operator+=:在字符串后追加字符串str
void test_string7()
{
string s1("hello world");
cout << s1 << endl;
s1.push_back('x');
cout << s1 << endl;
s1.append(" yyyyyy!!");
cout << s1 << endl;
string s2("111111");
s1 += 'y';
s1 += "zzzzzzzz";
s1 += s2;
cout << s1 << endl;
}
输出结果:
hello world
hello worldx
hello worldx yyyyyy!!
hello worldx yyyyyy!!yzzzzzzzz111111
2.assign;insert
void test_string8()
{
string s1("hello world");
cout << s1 << endl;
s1.assign("111111");//将s1重新置为 111111
cout << s1 << endl;//输出:111111
// 慎用,因为效率不高 -> O(N)
// 实践中需求也不高
string s2("hello world");
s2.insert(0, "xxxx");
cout << s2 << endl;//输出:xxxxhello world
// char ch = 'y';
// cin >> ch;
// s2.insert(0, 2, ch);//第0个位置,插入2个ch
// cout << s2 << endl;
s2.insert(s2.begin(), 'y');//用迭代器插入
cout << s2 << endl;
s2.insert(s2.begin(), s1.begin(), s1.end());//将s1以迭代器方式插入s2的0号位置
cout << s2 << endl;
}
输出结果:
hello world
111111
xxxxhello world
yxxxxhello world
111111yxxxxhello world
3.erase;replace
void test_string9()
{
string s1("hello world");
cout << s1 << endl;
// erase效率不高,慎用,和insert类似,要挪动数据
s1.erase(0, 1);
cout << s1 << endl;//移出第0个位置的字符
//s1.erase(5);
s1.erase(5, 100);//移除第5个开始以后所有位置的字符(因为最大长度小于100)
cout << s1 << endl;
}
void test_string9()
{
// replace效率不高,慎用,和insert类似,要挪动数据
string s2("hello world");
s2.replace(5, 1, "%20");//在第五个位置,横跨一个长度 改为%20
cout << s2 << endl;
string s3("hello world hello bit");
for (size_t i = 0; i < s3.size(); )
{
if (s3[i] == ' ')
{
s3.replace(i, 1, "%20");
i += 3;
}
else
{
i++;
}
}
cout << s3 << endl;
string s4("hello world hello bit");
string s5;
for (auto ch : s4)
{
if (ch != ' ')
{
s5 += ch;
}
else
{
s5 += "%20";
}
}
cout << s5 << endl;
}
int main(){
test_string9();
return 0;
}
4.rfind
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
int main(){
string ss = "hello world";
cout << ss.rfind("world") << endl;
return 0;
}
5.substr
在str中从pos位置开始,截取n个字符,然后将其返回
int main(){
string ss = "Greatness it is just something we made up";
int find = ss.rfind("it");
cout << ss.substr(find) << endl;
cout << ss.substr(find,2) << endl;
return 0;
}
void test_string12()
{
string file("string.cpp.zip");
size_t pos = file.rfind('.');
//string suffix = file.substr(pos, file.size() - pos);
string suffix = file.substr(pos);
cout << suffix << endl;
}
6.c_str
返回char格式字符串
int main(){
string s1 = "hello world";
char *c1 = new char[s1.size()];
strcpy(c1, s1.c_str());
for(int i = 0; i < s1.size()/sizeof(c1[0]); i++){
cout << c1[i];
}
cout << endl;
return 0;
}
补充
1.reverse(逆置 反转)
int main(){
string ss = "hello world";
reverse(ss.begin(), ss.end());
cout << ss << endl;
return 0;
}
输出结果:
dlrow olleh
2.Sort
void test_string6()
{
string s1("hello world");
cout << s1 << endl;
// s1按字典序排序
sort(s1.begin(), s1.end());
cout << s1 << endl;
// 第一个和最后一个参与排序
sort(++s1.begin(), --s1.end());
cout << s1 << endl;
// 前5个排序 [0, 5)
sort(s1.begin(), s1.begin()+5);
cout << s1 << endl;
}
int main(){
test_string6();
return 0;
}
输出结果:
hello world
dehllloorw
dehllloorw
dehllloorw