我想替换矢量字符串中的字符串。我的意思是,我有一个矢量字符串,定义矢量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并稍后给出一些值)。 有人知道我做错了什么吗?
由于
答案 0 :(得分:1)
std::replace
不会将序列替换为其他序列。它用其他单个元素替换单个元素。除此之外,将数字附加到字符串的方法不起作用。
尝试使用boost::replace_first
或boost::replace_all
以及boost::lexical_cast
或std::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;