2013-05-28 109 views
1

我創建了一個替換字符串的函數。字符串替換中的C++錯誤

它看起來像這樣:

void replace_with(wstring& src, const wstring& what, const wstring& with) 
{  
    if (what != with) { 
     wstring temp; 
     wstring::size_type prev_pos = 0, pos = src.find(what, 0); 
     while (wstring::npos != pos) { 
      temp += wstring(src.begin() + prev_pos, src.begin() + pos) + with; 
      prev_pos = pos + what.size(); 
      pos = src.find(what, prev_pos); 
     } 
     if (!temp.empty()) { 
      src = temp + wstring(src.begin() + prev_pos, src.end()); 
      if (wstring::npos == with.find(what)) { 
       replace_with(src, what, with); 
      } 
     } 
    } 
} 

但是,如果我的字符串是大小== 1,「什麼」是exactely字符串,它不會取代它。

例如

wstring sThis=L"-"; 
replace_with(sThis,L"-",L""); 

...不會替代 「 - 」。

我看不出我出錯的地方。

有人可以幫忙嗎?

+2

如果這純粹是一種學習練習,不錯,但除此之外,爲什麼不使用['std :: string :: replace'](http://en.cppreference.com/w/cpp /串/ basic_string的/替換)? – BoBTFish

回答

1

該函數的主要部分工作正常。問題是if(!temp.empty())部分,這絕對沒有意義。用整行替換整個if塊即可

src = temp + wstring(src.begin() + prev_pos, src.end()); 

它應該可以正常工作。

提示:嘗試用文字解釋函數的最後部分在做什麼。

2
void replace_with(wstring &src, wstring &what, wstring &with) { 
    for (size_t index = 0; (index = src.find(what, index)) != wstring::npos ;) { 
     src.replace(index, what.length(), with); 
     index += with.length(); 
    }  
}