首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C++】std::string和size()函数进阶解析

【C++】std::string和size()函数进阶解析

作者头像
CSDN-Z
发布2025-01-10 08:38:48
发布2025-01-10 08:38:48
9720
举报
文章被收录于专栏:AIGCAIGC

💯前言

  • C++ 中的 std::string 提供了一种高效且简单的方式来操作字符串,不仅可以进行轻松的字符串连接,还能完成长度计算、字符访问和后缀处理等处理任务。本文将优化精进地分析 C++ 中的 std::string 和其采用的常见函数,尤其是 size() 函数,并提供相关优化解释和知识拓展。 C++ 参考手册

💯基础知识:C++ 中的std::string

字符串的基础概念

C++ 中, std::string 是一种是封装类,能夠提供对字符串进行操作的简单方式。和传统的 C 风格字符串(char[])相比,它更加高效和安全,提供了丰富的语法支持。

典型例如:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s1 = "hello";
    string s2 = "world";
    string s3 = s1 + " " + s2; // 字符串相连

    cout << s3 << endl; // 输出:hello world
    return 0;
}

上面过程体现了 C++ 字符串的连接功能,显示了它的自然语法背后的高效。

size() 函数基础

在字符串操作中,实现字符串长度计算是一项基础而重要的功能。C++ 中的 std::string 提供了两个全程等任的函数:size()length(),它们用于计算字符串的长度,返回字符串中的字符数量。

例如:

代码语言:javascript
复制
string s = "hello";
cout << s.size() << endl;    // 输出:5
cout << s.length() << endl; // 输出:5

注意:size()length() 是等任的,可以任意使用任一个。

使用size()实例:计算字符串长度

在下面这段代码中,实现了通过 size() 函数来计算一些不同内容字符串的长度。

代码:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;               // 完全空字符串
    string s1 = "hello";   // 有 5 个字符
    string s2 = "hello world"; // 包含空格共 11 个字符
    string s3 = "12lab!~ ";    // 包括空格共 14 个字符

    cout << "s:" << s.size() << endl;
    cout << "s1:" << s1.size() << endl;
    cout << "s2:" << s2.size() << endl;
    cout << "s3:" << s3.size() << endl;

    return 0;
}

运行结果:

代码语言:javascript
复制
s:0
s1:5
s2:11
s3:14

分析:

  1. 空字符串: 字符串 s 为空,因此返回长度 0。
  2. 普通字符串: 字符串 s1 包含 5 个字符,因此返回长度 5。
  3. 包含空格: 字符串 s2 含有一个空格,因此返回总长度 11。
  4. 包括空格和符号: s3 包含多种符号和空格,返回总长度 14。

从运行结果可以看出,size() 会正确计算字符串中的字符总数,包括字母、数字,空格,和其他符号。

💯基于size()的字符串解析和访问方式

代码实现:通过下标访问字符串

C++ 允许通过下标访问字符串中的单个字符:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "abcdef";
    for (int i = 0; i < s.size(); i++) {
        cout << s[i] << " "; // 通过下标访问字符,并传递打印
    }
    return 0;
}

运行结果:

代码语言:javascript
复制
a b c d e f

分析:

  1. 输出格式: 通过下标访问,字符串中每个字符都被单独打印,字符之间用空格分隔。
  2. 转到下标操作: 从 0 起始,直到 size() 返回的长度为止,通过下标每次选取字符。

size() 与下标访问的优化功能

通过下标访问和 size() 相结合,可以高效地进行字符级的解析:

  1. 选取指定字符串内的字符。
  2. 配合算法,进行字符级计算。

例如:给定字符串,计算其中大写字母的总数:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "HelloWorld123";
    int count = 0;

    for (int i = 0; i < s.size(); i++) {
        if (isupper(s[i])) {
            count++;
        }
    }

    cout << "Number of uppercase letters: " << count << endl;
    return 0;
}

运行结果:

代码语言:javascript
复制
Number of uppercase letters: 2

💯进阶拓展:字符串的通过变量访问和更深操作

通过迭代器访问

std::string 还允许通过迭代器实现字符的访问:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "abcdef";
    for (auto it = s.begin(); it != s.end(); ++it) {
        cout << *it << " ";
    }
    return 0;
}

运行结果:

代码语言:javascript
复制
a b c d e f

at()函数和字符检查

at() 函数会对下标进行范围检查,能够更好地确保安全:

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "abcdef";
    try {
        cout << s.at(0) << endl; // 正常输出第一个字符
        cout << s.at(10) << endl; // 越界,抛出异常
    } catch (out_of_range &e) {
        cout << "Exception: " << e.what() << endl;
    }
    return 0;
}

运行结果:

代码语言:javascript
复制
a
Exception: basic_string::at: __n (which is 10) >= this->size() (which is 6)

分析:

  • s.at(0) 正常返回第一个字符。
  • s.at(10) 超出范围,抛出 out_of_range 异常,确保程序不会因为非法访问崩溃。

💯小结

本文从基础到进阶详细解析了 C++ 中 std::string 的功能,尤其是 size() 函数的应用及其与下标访问、迭代器、at() 方法的结合使用。同时补充了许多进阶拓展内容,包括安全性检查和高效字符串操作的实践。通过这些知识点,相信读者能够更加灵活、高效、安全地处理 C++ 字符串操作。如果对某些部分有疑问或需要更深入的探讨,可以进一步结合具体场景和实践需求展开!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 💯前言
  • 💯基础知识:C++ 中的std::string
    • 字符串的基础概念
    • size() 函数基础
    • 使用size()实例:计算字符串长度
  • 💯基于size()的字符串解析和访问方式
    • 代码实现:通过下标访问字符串
    • size() 与下标访问的优化功能
  • 💯进阶拓展:字符串的通过变量访问和更深操作
    • 通过迭代器访问
    • at()函数和字符检查
  • 💯小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档