您的位置:首页 > 游戏 > 手游 > C++ 标准库string

C++ 标准库string

2024/11/17 17:34:40 来源:https://blog.csdn.net/mrtwenty/article/details/139565621  浏览:    关键词: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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com