2015-02-10 81 views
0

我試圖通過一個給定的字符串用for循環,每個迭代用一個字符從一個矢量[char]替換一個字符。 問題是替換插入整個vector-k而不是在地點k的字符,我無法弄清楚我做錯了什麼。C++:string.replace插入太多字符

任何和所有的幫助表示讚賞。

(字母表是一個常量字符串a-z,FirstWord是給定的字符串)。

vector<char> VectorAlphabet; 
for (int i=0; i<alphabet.length(); ++i) 
{ 
    VectorAlphabet.push_back(alphabet.at(i)); 
} 

     for (int i = 0; i < FirstWord.length(); ++i) 
     { 
      for (int k = 0; k < VectorAlphabet.size(); ++k) 
      { 
       string TempWord = FirstWord; 
       TempWord.replace(i, 1, &VectorAlphabet[k]); 
       if (CheckForValidWord(TempWord, WordSet)) 
       { 
        if(CheckForDuplicateChain(TempWord, DuplicateWordSet)) 
        { 
         DuplicateWordSet.insert(TempWord); 
         stack<string> TempStack = WordStack; 
         TempStack.push(TempWord); 
         WordQueue.push(TempStack); 
        } 
       } 
      } 

     } 

e.g TempWord = tempword,然後在第一次迭代TempWord.replace()之後是ABCDE ... zempWord。而不是aempword。在第二個for循環的第二個到最後一個迭代中,它是yzempword。

我錯過了什麼?

+0

'&VectorAlphabet [K]'可能是沒有零終止的C字符串(您要更換由C-串一個字符) – 2015-02-10 23:14:58

+0

但我不明白爲什麼我」 d插入一個完整的字符串,因爲VectorAlphabet中的每個位置都是一個字符,而我只從一個位置插入數據。 – Rikard 2015-02-10 23:21:08

+0

嘗試'TempWord.replace(i,1,1,VectorAlphabet [k]);' – 2015-02-10 23:23:56

回答

3

問題解決了,感謝DieterLücking。

仔細看看string.replace reference,我發現我試圖使用一個替換,它將字符串作爲輸入,然後將矢量[char]解釋爲從k位置開始的c字符串。

通過使用填充版本的替換向量位置正確地用作char。

新的代碼是:

for (int i = 0; i < FirstWord.length(); ++i) 
     { 
      for (int k = 0; k < VectorAlphabet.size(); ++k) 
      { 
       string TempWord = WordStack.top(); 
       // Change: 
       TempWord.replace(i, 1, 1, VectorAlphabet[k]); 
       if (CheckForValidWord(TempWord, WordSet)) 
       { 
        if(CheckForDuplicateChain(TempWord, DuplicateWordSet)) 
        { 
         DuplicateWordSet.insert(TempWord); 
         stack<string> TempStack = WordStack; 
         TempStack.push(TempWord); 
         WordQueue.push(TempStack); 
        } 
       } 
      } 

     }