c++字符串分割和操作
C++ string split and manipulation
字符串都是这样的:
string s="name_number";
我想把名字和数字分开,得到两个字符串"name"answers"number"。然后我需要这个数字来做加法:
int new_number=number+10;
,用"name_newnumber"重建字符串。有没有一种既聪明又快速的方法来做到这一点?它的程序有实时限制,所以它应该尽可能快。我只提出了分割或find_first_of,但我想知道是否有更好的东西
您可以轻松地使用std::istringstream
:
std::istringstream iss(s);
std::string name;
std::getline(iss, name, '_');
int number;
iss >> number;
然后用number
做任何你想做的事情来得到newnumber
,然后再把它们连接在一起:
std::string newstring = name + "_" + std::to_string(newnumber);
这可以很容易地通过更多的错误检查来实现(例如,如果流提取失败)。
试试下面这个想法。
#include <iostream>
#include <string>
int main()
{
std::string s = "name_5";
std::cout << s << std::endl;
std::string::size_type n = s.rfind( '_' );
if ( n != std::string::npos )
{
s.replace( n + 1, std::string::npos,
std::to_string( std::stoi( s.substr( n + 1 ) ) + 10 ) );
}
std::cout << s << std::endl;
return 0;
}
输出为
name_5
name_15
考虑到我使用的方法rfind
而不是find
。在这种情况下,名称可以包含一个内嵌的下划线。
例如,如果您将字符串初始化为
std::string s="Main_Name_ 5";
你会得到
Main_Name_ 5
Main_Name_15
像这样的东西应该会有效果
std::string abc = "name_10";
std::string name = abc.substr(0, abc.find('_'));
int i = std::stoi(abc.substr(abc.find('_') + 1));
// change i
++i;
abc = name + '_' + std::to_string(i);
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在C++中从字符串中分割字符
- 重载操作程序时出错>>用于类中的字符串 memebr
- C++映射分割错误(核心转储)
- 对字符串进行位操作
- C++为线程工作动态地分割例程
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 由cin中的字符串中未捕获空白引起的分割错误
- 位移操作和位掩码未检测到重复字符
- 打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 在 c++ 中操作向量时的分割错误
- c++字符串分割和操作