C++ 标准库string

常用函数
函数名说明
at 、[]获取单个字符
append追加字符串
insert插入字符串
length、size字符长度
empty返回布尔值,判断是否字符串为空
capacity字符串容量
reserve预分配内存,至少保证能容纳n个字符而不必重新分配
find字符串查找
replace字符串替换
resize改变字符串大小,可选填充值初始化新空间。
substr获取子字符串
std::string::npos

std::string::npos是C++标准库中std::string类的一个静态成员常量,其值通常被定义为std::size_t类型的最大值。这个特殊值常用于表示没有找到所查找的子串,或者表示一个超出字符串长度的有效索引位置。

示例:

std::string str = "Hello, world!";
size_t found = str.find("world");
if (found != std::string::npos) {
    std::cout << "找到子串 'world' 在位置: " << found << std::endl;
} else {
    std::cout << "没有找到子串 'world'" << std::endl;
}

示例1:

string str="abc";
// 设置字符串的预留容量为100个字符
str.reserve(100);

//如果预先知道str会增长到一定程序,可以先预留容量
//避免内存多次分配,提高效率,当str长度超过100时,会自动扩容
std::cout<<str.capacity()<<std::endl;

示例2:

string str="abc";
//字符串长度
std::cout<<str.length()<<std::endl;
//下标超过不会报错
std::cout<<"取单个字符:"<<str[10]<<endl;
//超过会报错
std::cout<<"取单个字符:"<<str.at(1)<<endl;
//遍历
int abc=str.length();
for(int i =0;i < abc;i++){
    std::cout<<str[i]<<std::endl;
}
//第二种
for(char &i :str){
    std::cout<<i<<std::endl;
}
字符串替换
#include <iostream>
#include <string>
using namespace std;

//字符串替换,利用 string 的replace 方法和 find 方法,重新实现了一个函数,方便字符串的替换
std::string replace(std::string str, const std::string& from, const std::string& to, size_t maxReplacements = std::string::npos) {
    size_t startPos = 0;
    size_t replacementsDone = 0;

    // 主循环:只要能找到"from"子串并且没有超过最大替换次数
    while ((startPos = str.find(from, startPos)) != std::string::npos) {
        if (maxReplacements != std::string::npos && replacementsDone >= maxReplacements) {
            break;  // 达到最大替换次数,退出循环
        }
        str.replace(startPos, from.length(), to);
        // 移动到替换后的位置,避免在新插入的子串中再次查找
        startPos += to.length();
        ++replacementsDone;
    }
    return str;
}
int main()
{
    std::string str = "aaa bbb ccc";

    std::cout<<replace(str,"b","x",1)<<std::endl;
    std::cout<<replace(str,"b","x")<<std::endl;
    std::cout<<replace(str,"b","xx")<<std::endl;
    return 0;
}
分割字符串
#include <iostream>
#include <string>
#include <vector>
using namespace std;

std::vector<std::string> split(const std::string& s, std::string delimiter) {
    std::vector<std::string> tokens;
    size_t start = 0;
    size_t end = s.find(delimiter);

    while (end != std::string::npos) {
        tokens.push_back(s.substr(start, end - start));
        start = end + delimiter.length();
        end = s.find(delimiter, start);
    }
    tokens.push_back(s.substr(start, end)); // 添加最后一个子串
    return tokens;
}

int main()
{
    std::string str = "aaa;bbb;ccc";
    auto res= split(str,";");
    for (const auto& val : res) {
        std::cout << val << std::endl;
    }
    return 0;
}
类型转换
  • std::stoi 字符串转整数, 可以 翻译成 string to int
  • std::stof 字符串转float, 可以 翻译成 string to float
  • std::stod 字符串转double, 可以 翻译成 string to double
  • std::to_string 将其他数据类型转成string
  • 转换的时候,需要捕获异常,因为容易转换失败

string转int

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

int main()
{
    string strNum = "123.12";
    try {
        int num = std::stoi(strNum);
        std::cout << "转换后的整数为:" << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cerr << "无法转换为整数: " << e.what() << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "超出整数范围: " << e.what() << std::endl;
    }
    return 0;
}

int、float、double转string

#include <string>
using namespace std;
int main()
{ 
    int num = 123;
    float f=12.3;
    double a=123.222;
    std::string strNum1 = std::to_string(num);
    std::string strNum2 = std::to_string(f);
    std::string strNum3 = std::to_string(a);
    return 0;
}
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值