当前位置: 首页 > news >正文

C++ -string -常见用法5

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

在这里插入图片描述

文章目录

  • 💡前言
  • 💡非成员函数
    • 1.operator+
      • 1.1函数原型
      • 1.2使用
      • 1.3注意
    • 2.relational operators
    • 3.swap
    • 4.operator>>
    • 5.operator<<
    • 6.operator<<
  • 💡转换
    • 1.sto...
    • 2.to_string

💡前言

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

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

对于那些希望深入学习更多细节的读者,可以去看看这个网站:cplusplus.com,以获取更全面的参考资料。

💡非成员函数

1.operator+

1.1函数原型

string operator+ (const string& lhs, const string& rhs);
string operator+ (const string& lhs, const char*   rhs);
string operator+ (const char*   lhs, const string& rhs);
string operator+ (const string& lhs, char          rhs);
string operator+ (char          lhs, const string& rhs);

1.2使用

可以将一个 字符串 和 一个 字符串/字符数组/字符 拼成一个字符串。
例如:

void Test()
{string str("Hello World!");string str1 = str.substr(0, str.find(' ')) + str.substr(str.find(' ') + 1); // HelloWorld!string str2 = str1 + "!"; // HelloWorld!!string str3 = str2 + '!'; // HelloWorld!!!cout << str1 << endl;cout << str2 << endl;cout << str3 << endl;
}

Output :

HelloWorld!
HelloWorld!!
HelloWorld!!!

1.3注意

未定义行为也是有的:

void Test()
{string str("HelloWorld!");char ch[3] = { '6','6','6' }; // 未以'\0'结尾的字符数组string str4 = str1 + ch;cout << str4 << endl;
}

在这里插入图片描述

2.relational operators

关系运算符重载:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注,这些函数底层调用的都是string::compare
如,operator<
在这里插入图片描述
再比如operator>=:(先调operator<,再调compare)
在这里插入图片描述

3.swap

这个函数提供了一种高效的方式来交换字符串对象的内容,通过优化内部数据的所有权转移,减少了不必要的内存操作,使得交换操作更为高效。

在这里插入图片描述

  1. 交换字符串的值

    • 该函数的主要功能是交换两个字符串对象的值。调用此函数后,原来在 x 中的字符串值将转移到 y 中,反之亦然。
  2. 重载的 swap 函数

    • swap 是一个常见的算法,通常用于交换两个变量的值。这里提到的重载意味着这个函数的实现可能针对字符串对象进行了优化,使得它能更高效地进行值的交换。
  3. 性能优化

    • 通过交换字符串的内部数据的所有权,而不是逐字符复制,函数能显著提高性能。这种方法称为“移动语义”(move semantics),允许两个字符串对象仅仅交换它们的数据引用,而不是复制所有的字符数据。这样做的好处是减少了内存的使用和时间开销。
  4. 行为类似于 x.swap(y)

    • 这个函数的行为类似于直接调用 x.swap(y),这意味着在使用该函数后,两个字符串的内容将被有效交换,而不涉及实际的数据复制,从而进一步提高效率。

4.operator>>

这个函数通过重载操作符 >> 提供了一种简洁的方式,从输入流中提取字符串对象的内容。它使得字符串的输入变得直观,并且通过动态添加字符来构建字符串。同时,注意到提取操作的限制是只能提取单个单词,这在处理输入时需要加以考虑。

在这里插入图片描述

  1. 提取字符串

    • 该函数的作用是从输入流中提取字符,并将这些字符存储到一个字符串对象中。提取时,之前字符串中的内容会被新的字符序列替换。
  2. 重载操作符 >>

    • 在 C++ 中,操作符 >> 通常用于从输入流中读取数据。通过重载该操作符,字符串对象可以使用 >> 来接收输入,方便用户从流中读取字符串内容。
  3. 字符追加

    • 每当从流中提取一个字符时,都会使用 push_back 方法将该字符追加到字符串对象中。这意味着字符串对象会动态地增长以容纳新字符。
  4. 使用空白字符作为分隔符

    • 输入流的提取操作默认使用空白字符(如空格、制表符和换行符)作为分隔符,这意味着该操作仅提取一个“单词”。如果用户希望读取整行文本,可以使用 getline 函数,这样可以读取到包括空格在内的整行内容。

5.operator<<

这个函数通过重载操作符 << 提供了一种简单而直观的方式,将字符串对象的内容插入到输出流中。这种方式增强了字符串对象的可用性,使得它们可以与流操作(如打印到控制台或写入文件)无缝配合。
在这里插入图片描述

  1. 插入字符串

    • 该函数的作用是将一个字符串对象的内容(即字符序列)插入到输出流中,例如标准输出流 std::cout 或文件输出流。
  2. 重载操作符 <<

    • 在 C++ 中,操作符 << 通常用于将数据输出到流中。通过重载该操作符,字符串对象可以像基本数据类型(如整数或浮点数)一样,方便地使用 << 进行输出。
  3. 与 C 字符串的相似性

    • 该重载的实现模仿了 ostream::operator<< 在处理 C 风格字符串(即以 null 结尾的字符数组)时的行为。这意味着用户在使用 << 操作符输出字符串对象时,不需要进行额外的转换,使用起来非常简便。
    • 需注意的是,与直接处理C风格的字符串还是有点区别的,比如这里不会遇到’\0’就停止:
      string str("Hello");
      str+='\0';
      str+="World";
      cout << str << endl;
      
      Output :
      HelloWorld
      

6.operator<<

可以读空白字符!

这个函数提供了一种方便的方式,从输入流中提取一行字符并将其存储到字符串对象中。通过处理分隔符和确保安全提取,它增强了字符串的输入能力,使得读取用户输入或文件内容变得更加灵活。
在这里插入图片描述

  1. 提取一行字符

    • 该函数的主要作用是从输入流中提取字符,直到遇到指定的分隔符或换行符,将提取的字符存储到字符串中。
  2. 处理结束条件

    • 提取操作会在达到流的末尾(EOF)时停止,也会在输入过程中出现任何错误时停止。这种安全性确保了程序的健壮性。
  3. 分隔符的处理

    • 如果在提取过程中遇到了指定的分隔符,该分隔符会被提取并丢弃,这意味着它不会被存储到字符串中,下一次的输入操作将会在分隔符之后开始。
  4. 替换现有内容

    • 在调用该函数之前,字符串 str 中的内容会被新提取的字符序列替换,这使得 str 始终保存最新的提取结果。
  5. 字符追加

    • 每个提取的字符会通过调用 push_back 方法被追加到字符串对象中,这样可以动态地构建字符串。

💡转换

string类提供了一系列函数进行类型转换。

1.sto…

用于将字符串转换为数字类型,涵盖了多种整数和浮点数类型。

  •   int stoi (const string&  str, size_t* idx = 0, int base = 10);
    
    • 将字符串 str 转换为 int 类型。
    • idx 是可选参数,用于指向转换后未处理部分的索引。
    • base 指定转换的进制,默认为十进制(10)。
  • long stol (const string&  str, size_t* idx = 0, int base = 10);
    
    • 将字符串 str 转换为 long 类型。
    • stoi 相似,支持进制和未处理部分的索引。
  • unsigned long stoul (const string&  str, size_t* idx = 0, int base = 10);
    
    • 将字符串 str 转换为无符号长整型 unsigned long
  • long long stoll (const string&  str, size_t* idx = 0, int base = 10);unsigned long long stoull (const string&  str, size_t* idx = 0, int base = 10);float stof (const string&  str, size_t* idx = 0);double stod (const string&  str, size_t* idx = 0);long double stold (const string&  str, size_t* idx = 0);
    
    • 这几个与上面类似。

在使用这些函数时,应确保输入字符串的格式正确,否则可能会抛出异常或返回不确定的值。

2.to_string

to_string 函数用于将各种基本数据类型转换为 string 类型,具体函数如下:

  • string to_string(int val);
  • string to_string(long val);
  • string to_string(long long val);
  • string to_string(unsigned val);
  • string to_string(unsigned long val);
  • string to_string(unsigned long long val);
  • string to_string(float val);
  • string to_string(double val);
  • string to_string(long double val);


在这里插入图片描述


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


http://www.mrgr.cn/news/55043.html

相关文章:

  • Snort浅析
  • 中国白酒怎么喝
  • SQL 自学:事务处理的COMMIT 和 ROLLBACK 语句的运用
  • 学习eNSP对提升就业竞争力有多大帮助?
  • C++实现循环队列和链式队列操作(实验5--作业)
  • 二、Linux 入门教程:开启大数据领域的神奇之旅
  • DS快速排序和归并排序的非递归实现(16)
  • 【Javaee】网络编程-TCP Socket
  • Linux常用命令详细解析(含完整命令演示过程)
  • windows C++ 有效利用异步代理库(二)
  • 上海市货运资格证二寸照片要求及手机拍照方法
  • C++编程语言:抽象机制:运算符重载(Bjarne Stroustrup)
  • PostgreSQL模板数据库template0和template1的异同点
  • 033 商品搜索
  • 音视频入门基础:FLV专题(17)——FFmpeg源码中,提取Video Tag的VIDEODATA的实现
  • Linux:基础IO
  • 软件测试技巧-如何定位前后端bug?
  • 营销新境界:解码品牌增长策略
  • [OpenCV] 数字图像处理 C++ 学习——17模板匹配详细讲解+附完整代码
  • 3.订阅者Subscriber的编程实现以及话题消息定义与使用后续课程
  • pgAdmin不显示template1数据库,该如何设置才可以显示?
  • ACM与蓝桥杯竞赛指南 基本输入输出格式二
  • 波浪理论(Elliott Wave Theory)
  • autosar-port/interface学习总结
  • Docker compose 安装Jenkins
  • c++迷宫游戏