替换矢量字符串中的字符串

时间:2012-03-12 03:13:44

标签: c++ string vector

我想替换矢量字符串中的字符串。我的意思是,我有一个矢量字符串,定义矢量tmpback,信息如下:name_lastname_phonenumber

我想替换一些姓氏。例如,如果某人是john_smith_5551234,我想将smith替换为smith100。

这是我的代码,部分内容:

vector<string> tmpback = names;
for (Int_t i = 0; i < tmpback.size(); i++) {
   replace(tmpback[i].begin(),tmpback[i].end(),"smith", "smith"+number);
}

(我之前将数字定义为Int_t number = 0并稍后给出一些值)。 有人知道我做错了什么吗?

由于

2 个答案:

答案 0 :(得分:1)

std::replace不会将序列替换为其他序列。它用其他单个元素替换单个元素。除此之外,将数字附加到字符串的方法不起作用。

尝试使用boost::replace_firstboost::replace_all以及boost::lexical_caststd::to_string(仅限c ++ 11)将数字转换为字符串。

using namespace boost;
std::string replace_str = std::string("smith") + lexical_cast<std::string>(number);
replace_first(tmpback[i], "smith", replace_str);

您也可以搜索子字符串,如果找到它,请在其后插入数字(转换为字符串):

std::string::size_type pos = tmpback[i].find("smith");
if (pos != std::string::npos)
{
    // adding 5 because that's the length of "smith"
    tmpback[i].insert(pos + 5, std::to_string(number));
}

答案 1 :(得分:0)

我的直接反应是想知道你为什么要把自己置于这种状况。而不是将三个单独的项目绑定到一个字符串中,然后操作该字符串的部分,为什么不创建一个结构,以便您可以单独使用每个部分?

struct person {
    std::string first_name;
    std::string last_name;
    int record_no;
    std::string phone_number;
};

这样一来,你可以给它自己的字段,并根据需要写一个合适的数字,而不是在最后一个名字的末尾添加记录号(或者你的'100'代表的任何内容),而不是将它写下来:

vector<person> tmpback;

for (int i=0; i<tmpback.size(); i++)
    tmpback[i].record_no = number;