2012-03-12 64 views
0

我想替換向量字符串中的字符串。我的意思是,我有一個矢量列,定義矢量tmpback,像這樣的信息:name_lastname_phonenumber替換向量字符串中的字符串

我想更換一些姓氏。例如,如果某人是john_smith_5551234,我想將smith替換爲smith100。

這是我的代碼,它的O部件:

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和以後給予一定的值)。 確實有人知道我做錯了什麼?

由於

+1

'替換(...,tmpback [I] .END(),...);' – perreal 2012-03-12 03:15:52

+0

對不起,錯字錯誤 – Alejandro 2012-03-12 03:35:44

+0

請出示number'的'定義,它是一個的std :: string ? – 2012-03-12 03:36:47

回答

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; 
+0

謝謝你的回答@Jerry。其實我只是在修改某人的代碼。但是,是的,這聽起來更合理。我會嘗試。 – Alejandro 2012-03-12 03:58:12

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)); 
} 
+0

感謝您的幫助@Benjamin,我得到這個錯誤:'錯誤:符號的lexical_cast不是在當前範圍names.C定義:400: 錯誤:符號字符串未在當前作用域中定義。第400行是你的第二行。 – Alejandro 2012-03-12 03:55:50

+0

@Alejandro:'lexical_cast'來自boost,正如我提供的鏈接所暗示的。要使用該方法,首先需要安裝boost,並且需要包含''。如果您不耐煩,還可以使用其他方法將數字轉換爲標準庫中可用的字符串。首先嚐試'std :: to_string',但正如我所說的那樣,它只能在C++ 11模式下使用。如果這不起作用,那麼你將不得不求助於stringstreams,這有點麻煩。 – 2012-03-12 03:59:18