当前位置: 首页> 科技> 名企 > 温州机械网站建设_网页设计与制作课程教学大纲_谷歌seo搜索_百度拍照搜索

温州机械网站建设_网页设计与制作课程教学大纲_谷歌seo搜索_百度拍照搜索

时间:2025/7/12 20:31:50来源:https://blog.csdn.net/2401_86587256/article/details/142933096 浏览次数:0次
温州机械网站建设_网页设计与制作课程教学大纲_谷歌seo搜索_百度拍照搜索

博客主页:【夜泉_ly】
本文专栏:【C++】
欢迎点赞👍收藏⭐关注❤️

在这里插入图片描述

文章目录

  • 💡前言
  • 💡修改
    • 1.operator= 与 assign
      • 1.1函数原型
      • 1.2用法速览
      • 1.3注意事项
    • 2.operator+= 与 append 、push_back
      • 2.1函数原型
      • 2.2用法速览
      • 2.3注意事项
    • 3.insert 、erase
      • 3.1函数原型
      • 3.2用法速览
    • 4.其他
      • 4.1swap
      • 4.2pop_back
      • 4.3replace

💡前言

在这篇文章中,我将继续简单探讨 C++string 的基本用法。写这篇文章的主要目的是帮助我巩固所学的知识,同时也便于未来的复习和参考。

如果你想大致的了解string的基本用法,也可以留下来看看。

对于那些希望深入学习更多细节的读者,可以去看看这个网站:cplusplus.com,以获取更全面的参考资料,网站上有丰富的文档和示例代码,能够帮助你更好地理解和运用 string

💡修改

1.operator= 与 assign

operator=assign放在一起是因为它们的功能基本相似,都是将给定内容分配给string类对象。
一般常用operator=,如果有特殊需要,可以用assign

1.1函数原型

operator=

string& operator= (const string& str);
string& operator= (const char* s);
string& operator= (char c);

assign

string& assign (const string& str);
string& assign (const string& str, size_t subpos, size_t sublen);
string& assign (const char* s);
string& assign (const char* s, size_t n);
string& assign (size_t n, char c);
template <class InputIterator>
string& assign (InputIterator first, InputIterator last);

1.2用法速览

使用operator=或assign时,会覆盖原串的内容。
这种特性需要注意,以避免无意中丢失重要数据。

  • operator=

    void Test()
    {//operator= 用于构造string s1 = "Hello World";string s2 = s1;cout << "s1-" << s1 << endl;cout << "s2-" << s2 << endl;string s3;//operator= 用于赋值s3 = '6';s1 = s3;s2 = '6';s3 = "Hello World";cout << "s1-" << s1 << endl;cout << "s2-" << s2 << endl;cout << "s3-" << s3 << endl;
    }
    

    Output:

    s1-Hello World
    s2-Hello World
    s1-6
    s2-6
    s3-Hello World
    
  • assign
    其实用得不多,因为再建一个对象就行了。虽然 assign 提供了更丰富的功能,但实际上在许多应用场景中,由于使用新对象来初始化其实是更清晰的。因此,平时开发中多使用 operator= 是个不错的选择。

1.3注意事项

虽然有string& operator= (char c);,但只能用于赋值,不能用于构造。

void Test()
{string str = '0';
}

这种语法会导致错误,因为不支持charstring的初始化:
在这里插入图片描述

2.operator+= 与 append 、push_back

operator+=appendpush_back,放在一起也是因为它们的功能相似,都是添加新的内容。
一般常用operator+=,如果有特殊需要,可以用appendpush_back

2.1函数原型

operator+=

string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char c);

append

string& append (const string& str);
string& append (const string& str, size_t subpos, size_t sublen);
string& append (const char* s);
string& append (const char* s, size_t n);
string& append (size_t n, char c);
template <class InputIterator>
string& append (InputIterator first, InputIterator last);

push_back

void push_back (char c);

2.2用法速览

能简单直接地将内容加到字符串的末尾。

void Test()
{string str;str += string("Hello");//Hellostr += " World";//Hello Worldstr += '!';//Hello World!cout << str << endl;str = string();str.append(string("Hello"));//Hellostr.append(string("Hello World"), 5, 1);//Hello+空格str.append("World");//Hello Worldstr.append("!!!!!", 1);//Hello World!str.append(1,'!');//Hello World!!cout << str << endl;str.push_back('!');//Hello World!!!cout << str << endl;
}

Output:

Hello World!
Hello World!!
Hello World!!!

2.3注意事项

使用上,这几个函数是很安全的,一般情况都不会报错。
效率方面,如果已知了所需空间的大小,可以先通过reserve开空间,可以减少频繁申请空间带来的消耗。

3.insert 、erase

将这两个函数放在一起是因为它们都很好用,但用的不多。
其原因是频繁的插入和删除可能会对性能产生较大影响,这里可类比顺序表的头插、头删。
但一些oj题的小型字符串应该没啥问题吧,我是这样想的,所以还是看了看。

3.1函数原型

insert

 string& insert (size_t pos, const string& str);string& insert (size_t pos, const string& str, size_t subpos, size_t sublen);string& insert (size_t pos, const char* s);string& insert (size_t pos, const char* s, size_t n);string& insert (size_t pos, size_t n, char c);void insert (iterator p, size_t n, char c);
iterator insert (iterator p, char c);
template <class InputIterator>void insert (iterator p, InputIterator first, InputIterator last);

erase

 string& erase (size_t pos = 0, size_t len = npos);
iterator erase (iterator p);
iterator erase (iterator first, iterator last);

3.2用法速览

void Test()
{string str;str.insert(0, string(1, 'H'));//Hstr.insert(1, string("Hello World"), 1, 4);//Hellostr.insert(str.size(), " World");//Hello Worldstr.insert(str.size(), "!!!!!", 1);//Hello World!str.insert(str.size(), 2, '!');//Hello World!!!cout << str << endl;str.erase(str.size() - 2, 3);//Hello Worldcout << str << endl;str.erase(str.begin(), str.end());//""str = "666";str.erase();//""cout << str << endl;
}

Output:

Hello World!!!
Hello World!

4.其他

4.1swap

void swap (string& str);

交换两个string类对象,

void Test()
{string str1, str2;str2 = "Hello World";str1.swap(str2);cout << "str1:"<<str1 << "  size1:"<<str1.size() <<"  capacity1:" << str1.capacity() << endl;cout << "str2:"<<str2 << "  size2:"<<str2.size() <<"  capacity2:" << str2.capacity() << endl;
}

括号外面可以是匿名对象:

string str1;
string("666666").swap(str1);
cout << str1; 

相当于将 "666666" 赋给 str1
Output:

666666

4.2pop_back

void pop_back();

尾删,但用于空串会导致未定义行为,VS上会断言:
在这里插入图片描述

4.3replace

最不好用的一个:
在这里插入图片描述
刚看到函数原型就直接劝退了,这里建议要用的时候再查文档。
在这里插入图片描述


希望本篇文章对你有所帮助!并激发你进一步探索编程的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!

关键字:温州机械网站建设_网页设计与制作课程教学大纲_谷歌seo搜索_百度拍照搜索

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: