c ++:string.replace插入太多字符

时间:2015-02-10 23:09:52

标签: c++ string vector replace

我正在尝试使用for循环遍历给定字符串,每次迭代用vector [char]中的字符替换一个字符。 问题是替换插入整个vector-k而不是k处的字符,我无法弄清楚我做错了什么。

感谢任何和所有帮助。

(alphabet是一个const字符串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);
                    }
                }
            }

        }

例如TempWord = tempword,然后在第一次迭代后的TempWord.replace()之后它是abcde ... zempWord。而不是aempword。在第二个for循环的第二个到最后一个迭代中,它是yzempword。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

问题解决了,感谢DieterLücking。

仔细观察string.replace reference,我看到我尝试使用以字符串作为输入的替换,然后将vector [char]解释为c字符串,从k位置开始

通过使用替换的填充版本,矢量位置正确地用作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);
                    }
                }
            }

        }