我正在尝试使用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。
我错过了什么?
答案 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);
}
}
}
}