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

C++中string笔记杂谈

string 类库中的size_type是一种怎样的自定义类型

在 C++ 的 string 类库中,size_type 是一种无符号整数类型,用于表示字符串的大小(长度)。

它被定义为能够容纳字符串可能的最大长度的无符号整数类型。

比如说,如果一个字符串可能非常长,使用普通的 int 可能无法表示其长度,这时就会使用 size_type 来确保有足够的范围来准确表示字符串的长度。

举个例子,如果要遍历一个字符串 std::string str = "Hello World"; ,可以这样写:

for (std::string::size_type i = 0; i < str.size(); ++i) {
    // 对每个字符进行操作
}

 这样能保证在处理不同长度的字符串时,不会出现长度表示范围不足的问题。

这样设计的原因

string 类中使用 size_type 这样的自定义类型来表示字符串的大小主要有以下几个原因:

  1. 可移植性:不同的平台上,整数类型的大小可能会有所不同。使用自定义的 size_type 可以确保在各种平台上,string 的大小表示都能有一致的行为和足够的范围。

  2. 明确语义:使用 size_type 能更清晰地表明这个类型专门用于表示字符串的大小,增加了代码的自解释性。

  3. 避免错误:如果直接使用 int 或其他固定的整数类型,可能会在处理特别长的字符串时出现溢出等错误。而 size_type 通常被设计为能够适应字符串可能达到的最大长度。

  4. 与标准库的一致性:整个标准库在很多容器和数据结构中都采用了类似的设计,使用自定义的类型来表示特定的度量,这有助于保持代码风格的统一和可理解性。

string对象与字符串字面值

在 C++ 中,将 string 对象与字符串字面值常量相加时,需要确保字符串字面值常量被明确转换为 string 类型。

可以使用 + 运算符来实现相加,例如:

std::string str = "Hello ";
std::string result = str + "World"; 

在 C++ 中,不能直接使用 + 运算符把两个 const char 数组(也就是字符串字面值)相加。

std::string s2 = "world";
std::string s4 = "hello" + "," + s2;

其中字面值字符串“hello”和“,”是不能之间相加的,需要显示的进行类型转换string("hello")

 string对象与字符串字面值相加时产生的临时对象

如:

string s1 = "hello";
string s3 = s1 + "," + "world";

与下面的语句是等价的:

string s1 = "hello";
string tmp = s1 + ",";
string s3 = tmp + "world";

tmp就是产生的临时对象。

在执行表达式计算过程中,会创建这个临时对象来存储中间结果。通常,编译器会在需要的时候分配内存来存储这个临时对象,并且在表达式的计算完成后,如果没有其他引用指向它,它会在适当的时候被释放。

string类的输入运算符和getline()函数是如何处理空白字符的

 

在 C++ 的 string 类中,输入运算符 >> 和 getline() 函数在处理空白字符时有不同的行为。

输入运算符 >> 会自动忽略输入前面的空白字符(如空格、制表符、换行符等),并且在遇到空白字符时会停止读取,将之前读取的非空白字符部分作为一个字符串存入目标 string 对象中。

例如,如果输入是 hello world ,使用 std::cin >> str; ,那么 str 只会被赋值为 hello 。

而 getline() 函数则会读取包括空白字符在内的一整行输入,直到遇到换行符为止。

例如,如果输入是 hello world ,使用 std::getline(std::cin, str); ,那么 str 会被赋值为 hello world 。

范围for语句

范围 for 语句是 C++11 引入的一种更简洁的循环结构,用于遍历一个序列(如数组、vector 、string 等)中的每个元素。

其一般形式为:

for (declaration : expression)
    statement

在处理 string 的每个字符时,范围 for 语句非常有用。它可以让您无需关心索引的操作,就能直接遍历字符串中的每个字符。

std::string str = "Hello";
for (char c : str) 
{
    std::cout << c << " ";
}

 


http://www.kler.cn/a/509251.html

相关文章:

  • wireshark抓路由器上的包 抓包路由器数据
  • PHP的HMAC_SHA1和HMAC_MD5算法方法
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (二、首页轮播图懒加载的实现)
  • Kafka权威指南(第2版)读书笔记
  • 中国石油大学(华东)自动评教工具(涵盖爬虫的基础知识,适合练手)
  • 配置AOSP下载环境
  • spring boot问题Invalid bound statement (not found)出现原因以及解决办法
  • 网络安全中攻击溯源有哪些方法?
  • Java锁 从乐观锁和悲观锁开始讲 面试复盘
  • wsl 使用 docker
  • 细说STM32F407单片机电源低功耗SleepMode模式及应用示例
  • ASP.NET Core - 配置系统之配置提供程序
  • 【Linux系列】查看服务器是否使用了 SSD 的多种方法
  • Spark Streaming的核心功能及其示例PySpark代码
  • Linux——线程的慨念及控制
  • Oracle数据库传统审计怎么用
  • 网络安全构成要素
  • 基于高光谱数据的叶片水分估测方法研究 【Matlab Python Origin】
  • 用c语言实现哈希表:03_hashing (哈希函数设计)
  • Flask学习入门笔记
  • 电梯系统的UML文档05
  • java根据模板导出word,并在word中插入echarts相关统计图片以及表格
  • 爱德华EDWARDS EPX180EPX500 Vacuum Pumps instruction Manual
  • 基于 Java Spring Boot 开发的项目复盘与技术总结
  • Spring Boot应用关闭分析
  • Linux中的nc命令是网络工具中的一种,用于进行网络连接和数据传输。下面是nc命令的使用方法和实例: