1. string 基础与长度获取
C++中的string类是标准库提供的字符串处理工具,相比C风格的字符数组更安全、更易用。我们先从最基础的长度获取开始,这是字符串操作的第一步。
1.1 length()与size()方法
string类提供了两种获取长度的方法:
cpp复制std::string str = "Hello World";
size_t len1 = str.length(); // 方法1
size_t len2 = str.size(); // 方法2
这两种方法完全等价,返回值类型都是size_t(无符号整型)。为什么会有两个相同功能的方法?这是历史原因造成的:
- length()来自早期字符串概念
- size()则是为了与STL容器接口保持一致
实际开发中建议统一使用size(),保持与vector等容器的一致性,这是现代C++的惯用法。
1.2 C风格方法:strlen()
虽然不推荐,但在与旧代码交互时可能需要:
cpp复制const char* cstr = str.c_str();
size_t len3 = strlen(cstr); // 需要包含<cstring>
这种方法效率较低,因为它需要遍历整个字符串直到遇到'\0'。而string::size()是直接返回存储的长度值,时间复杂度O(1)。
1.3 空字符串判断
实际开发中常用empty()而非size()==0:
cpp复制if(str.empty()) { /* 字符串为空 */ }
因为empty()的语义更清晰,某些实现可能有优化。这是来自STL容器的又一惯用法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串截取操作
截取子串是字符串处理的常见需求,C++提供了灵活的substr()方法。
2.1 基本用法
cpp复制std::string substr(size_t pos = 0, size_t len = npos) const;
- pos:起始位置(从0开始)
- len:要截取的长度
- npos:string定义的静态常量,表示直到字符串末尾
示例:
cpp复制std::string str = "Hello World";
std::
