C++ string常见用法

在 C++ 中,std::string 是一个非常常用的类,它提供了许多方便的接口来操作字符串。std::string 是 C++ 标准库中 std::basic_string 模板的一个实例化,专门用于处理字符串。这里我们将介绍一些常用的 std::string 接口。

1. 构造函数

  • 默认构造函数:

    std::string str;  // 创建一个空字符串
    
  • 从 C 风格字符串构造:

    const char* cstr = "Hello, World!";
    std::string str(cstr);  // 使用C风格字符串初始化
    
  • 从字符初始化:

    std::string str(5, 'a');  // 创建一个包含5个字符'a'的字符串
    
  • 从子字符串初始化:

    std::string str("Hello, World!", 5);  // 创建一个包含前5个字符的字符串 "Hello"
    

2. 赋值操作

  • 赋值操作符:

    std::string str = "Hello";
    std::string str2;
    str2 = str;  // 通过赋值操作符复制内容
    
  • 从 C 风格字符串赋值:

    std::string str;
    str = "Hello, World!";  // 赋值C风格字符串
    
  • 赋值指定长度的子字符串:

    std::string str;
    str.assign("Hello, World!", 5);  // 将字符串 "Hello" 赋值给str
    

3. 常用成员函数

3.1. 访问和修改字符串内容
  • 获取字符:

    char ch = str[0];  // 获取字符串的第一个字符
    char ch2 = str.at(1);  // 使用 at() 安全访问第2个字符
    
  • 修改字符:

    str[0] = 'h';  // 修改第一个字符为小写 'h'
    str.at(1) = 'E';  // 修改第二个字符为 'E'
    
  • 追加内容:

    str += " there";  // 追加字符串
    str.append("!");   // 使用 append() 追加
    
  • 插入内容:

    str.insert(5, ", World");  // 在索引位置5插入 ", World"
    
  • 删除内容:

    str.erase(5, 7);  // 从索引5开始删除7个字符
    
3.2. 字符串大小和清空
  • 获取长度:

    size_t len = str.size();  // 获取字符串的长度
    
  • 检查是否为空:

    bool isEmpty = str.empty();  // 检查字符串是否为空
    
  • 清空字符串:

    str.clear();  // 清空字符串内容
    
3.3. 子字符串
  • 获取子字符串:

    std::string substr = str.substr(0, 5);  // 获取从索引0开始的5个字符子字符串
    
  • 查找子字符串:

    size_t pos = str.find("World");  // 查找 "World" 在字符串中的位置,返回找到的索引,未找到返回 std::string::npos
    if (pos != std::string::npos) {
        std::cout << "Found at position: " << pos << std::endl;
    }
    
  • 查找字符:

    size_t pos = str.find('o');  // 查找字符 'o' 的位置
    
  • 替换子字符串:

    str.replace(0, 5, "Hi");  // 从索引0开始,替换5个字符为"Hi"
    
3.4. 字符串比较
  • 直接比较:

    if (str == "Hello") {  // 比较两个字符串是否相等
        std::cout << "Strings are equal!" << std::endl;
    }
    
  • 使用compare函数:

    int result = str.compare("Hello");  // 如果str < "Hello" 返回负值,str > "Hello" 返回正值,str == "Hello" 返回0
    
3.5. 转换
  • 转换为 C 风格字符串:

    const char* cstr = str.c_str();  // 返回 C 风格字符串(const char*)
    
  • 转换为字符数组:

    char arr[100];
    str.copy(arr, str.size());  // 将字符串内容拷贝到字符数组中
    arr[str.size()] = '\0';  // 添加 null 终止符
    
3.6. 其他常用函数
  • 替换所有出现的某个字符:

    std::replace(str.begin(), str.end(), 'o', 'O');  // 将字符串中的 'o' 替换为 'O'
    
  • 分割字符串:

    std::vector<std::string> split(const std::string& str, char delimiter) {
        std::vector<std::string> result;
        std::stringstream ss(str);
        std::string token;
        while (std::getline(ss, token, delimiter)) {
            result.push_back(token);
        }
        return result;
    }
    std::vector<std::string> parts = split("Hello,World,123", ',');
    

4. 常见的操作符重载

  • 赋值操作符 =:可以将一个字符串的内容赋值给另一个字符串。
  • 比较操作符:
    • ==!=<><=>= 等用于比较字符串的大小。
  • 索引操作符 []:访问和修改字符串中的单个字符。
  • 加号操作符 +:连接两个字符串。
    std::string str1 = "Hello";
    std::string str2 = " World!";
    std::string str3 = str1 + str2;  // 连接两个字符串
    

5. 性能考虑

  • std::string 使用动态内存分配,它会根据需要调整内存容量,因此对于小型字符串操作,std::string 通常非常高效。
  • 避免不必要的拷贝:通过使用常量引用 const std::string& 可以避免不必要的拷贝操作。
void printMessage(const std::string& msg) {
    std::cout << msg << std::endl;
}
  • 避免频繁的拼接操作:在处理大量字符串拼接时,考虑使用 std::ostringstreamstd::string::reserve 来预分配内存,避免多次重新分配。

总结

std::string 提供了丰富的接口来处理字符串,包括初始化、修改、查找、比较等功能。了解并熟练掌握这些接口,可以大大提高你的 C++ 编程效率。

### C++ 字符串的使用方法 在 C++ 中,`std::string` 是处理文本数据的主要方式之一。下面介绍一些常见的 `std::string` 使用场景及其操作。 #### 创建字符串对象 可以创建一个空字符串或初始化带有特定字符序列的字符串[^1]: ```cpp #include <iostream> #include <string> int main() { std::string emptyString; std::string helloWorld = "Hello, world!"; std::cout << "Empty String Length: " << emptyString.length() << '\n'; std::cout << "Hello World Content: " << helloWorld << '\n'; return 0; } ``` #### 访问和修改单个字符 通过索引访问字符串中的某个位置并读取或更改该处的内容: ```cpp if (!helloWorld.empty()) { char firstChar = helloWorld[0]; helloWorld[6] = 'W'; // 修改逗号后的第一个字母为大写 W std::cout << "First character is '" << firstChar << "'\n"; std::cout << "Modified message reads as follows:\n" << helloWorld << "\n"; } ``` #### 连接两个字符串 利用加号运算符 (`+`) 或者成员函数 append 来连接多个字符串: ```cpp std::string greetingPartOne = "Good morning "; std::string name = "Alice"; // Using operator + std::string fullGreeting = greetingPartOne + name; // Or using member function append() greetingPartOne.append(", how are you?"); std::cout << fullGreeting << "\n\n" << greetingPartOne << "\n"; ``` #### 查找子串的位置 使用 find 成员函数定位指定模式首次出现的地方;如果未找到则返回 npos 值表示失败: ```cpp size_t posOfComma = helloWorld.find(','); if (posOfComma != std::string::npos) { std::cout << "A comma was found at position " << posOfComma << ".\n"; } else { std::cout << "No commas were present.\n"; } ``` #### 替换部分字符串内容 replace 方法允许替换给定范围内的旧文本片段为新文本: ```cpp helloWorld.replace(7, 5, "afternoon"); std::cout << "Updated time of day: " << helloWorld << "\n"; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值