Заменить строку в векторной строке - PullRequest
0 голосов
/ 12 марта 2012

Я хочу заменить строку в векторной строке. Я имею в виду, у меня есть строка вектора, определите вектор tmpback с такой информацией: name_lastname_phonenumber

Я хочу заменить некоторые фамилии. Например, если кто-то является john_smith_5551234, я хочу заменить Смит на 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 число = 0, а некоторые значения приведу позже). кто-нибудь имел представление о том, что я делаю неправильно?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 марта 2012

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));
}
0 голосов
/ 12 марта 2012

Моей непосредственной реакцией было бы задаться вопросом, почему вы вообще оказались в такой ситуации.Вместо того, чтобы смешивать три отдельных элемента в строку, а затем манипулировать частями этой строки, почему бы не создать структуру, чтобы вы могли работать с каждым фрагментом отдельно?

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...