c++字符串分割和操作

C++ string split and manipulation

本文关键字:操作 分割 字符串 c++      更新时间:2023-10-16

字符串都是这样的:

 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);