C++中的String的常用函数用法总结

C++ 中 string 的常用函数用法总结(全面实用版)

C++ 中字符串使用 std::string(位于 <string> 头文件),它是标准库提供的强大、安全、易用的字符串类,远优于 C 风格的 char 数组。

1. 头文件与命名空间

#include <string>      // 必须包含
using namespace std;   // 常用,或写 std::string

2. 基本创建与初始化

string s1;                     // 空字符串
string s2 = "hello";           // C风格字符串初始化
string s3("world");            // 构造函数
string s4(5, 'a');             // "aaaaa"
string s5(s2);                 // 拷贝构造
string s6(s2, 1, 3);           // 从s2第1位开始取3个字符 → "ell"

3. 常用成员函数大全(按功能分类)

函数用法示例说明返回值/效果
长度与容量
size() / length()s.length()返回字符串长度(字符数)size_t
empty()s.empty()判断是否为空bool
capacity()s.capacity()当前分配的内存容量size_t
reserve(n)s.reserve(100)预分配空间,避免频繁扩容void
增删改
+= / append()s += “abc”;
s.append(“def”)
追加字符串string&
push_back(ch)s.push_back(‘x’)追加单个字符void
insert(pos, str)s.insert(2, “xyz”)在pos位置插入strstring&
erase(pos, len)s.erase(0, 3)从pos开始删除len个字符string&
clear()s.clear()清空字符串void
pop_back()s.pop_back()删除最后一个字符(C++11)void
访问与修改
[ ]s[0] = ‘H’访问/修改字符(不检查边界)char&
at()s.at(0) = ‘H’访问/修改字符(越界抛异常)char&
front()char c = s.front()第一个字符(C++11)char&
back()char c = s.back()最后一个字符(C++11)char&
查找
find(str, pos=0)s.find(“abc”)从pos开始查找str,返回首次出现位置size_t(没找到返回 string::npos)
rfind(str, pos=npos)s.rfind(“abc”)从pos向前找最后一次出现位置size_t
find_first_of(str)s.find_first_of(“aeiou”)找第一个元音位置size_t
find_last_of(str)s.find_last_of(“xyz”)找最后一个匹配字符位置size_t
find_first_not_of(str)找第一个不在str中的字符size_t
子串
substr(pos, len)string t = s.substr(1, 3)从pos开始取len个字符string
替换
replace(pos, len, str)s.replace(0, 5, “Hi”)用str替换从pos开始的len个字符string&
比较
compare(str)s.compare(t)字典序比较int(<0: s0 s>t)
== != < > <= >=s == t支持直接比较运算符bool
转换
c_str()const char* p = s.c_str()获取C风格字符串(以\0结尾)const char*
data()const char* p = s.data()获取字符数组(C++17前不一定\0结尾)const char*
copy(char* buf, len, pos=0)s.copy(buf, 5, 0)拷贝到buf(不自动加\0)size_t

4. 与 C 风格字符串互转

// string → char*
string s = "hello";
const char* c = s.c_str();     // 用于 printf、fopen 等需要 const char* 的函数

// char* → string
char ch[] = "world";
string s2(ch);                 // 直接构造
string s3 = ch;                // 赋值

5. 输入输出(与 cin/cout)

string s;
cin >> s;              // 读取单词(遇到空格停止)
getline(cin, s);       // 读取整行(包含空格,推荐)
cout << s << endl;

6. 实用示例代码

#include <iostream>
#include <string>
using namespace std;

int main() {
    string s = "  Hello World!  ";

    // 常用操作组合
    s = s.substr(2, 5);           // "Hello"
    s.append(" C++");             // "Hello C++"
    s.insert(5, ",");             // "Hello, C++"
    s.replace(6, 3, "World");     // "Hello, World"

    // 查找
    size_t pos = s.find("World");
    if (pos != string::npos) {
        cout << "找到位置: " << pos << endl;  // 输出 7
    }

    // 去除首尾空格(C++11前手动实现)
    s.erase(0, s.find_first_not_of(" \t"));
    s.erase(s.find_last_not_of(" \t") + 1);

    cout << "\"" << s << "\"" << endl;  // "Hello, World"
    return 0;
}

7. 注意事项与最佳实践

  • size()length() 完全等价。
  • string::npos 是常量,通常为 -1(size_t 的最大值),用于表示“未找到”。
  • [] 不检查边界,越界未定义行为;at() 检查边界,越界抛 out_of_range 异常。
  • c_str() 返回的指针在 string 被修改或销毁后失效。
  • string 是可拷贝的,但大字符串建议传 const string& 避免拷贝。
  • C++11 后推荐使用 front()back()pop_back()

掌握以上函数,就能轻松处理 95% 的字符串操作需求!如果有特定场景(如分割字符串、转数字),欢迎继续提问。

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部