我编写了这个函数来反转字符串中单词的顺序,该函数的行为符合预期,直到它读取了两个单词然后开始出现意外行为:
string ReverseString(string InputString){
int EndOfGroup = 0;
string ReversedString = " ";
int k = 0;
ReversedString.resize(InputString.size());
for (int i = InputString.length(); i > 0; i--){
if (isspace(InputString[i]))
{
EndOfGroup = i;
for (int j = i; j >= EndOfGroup && j < InputString.length(); j++)
{
ReversedString[k] = InputString[j] ;
k++;
}
}
}
我所说的行为出乎意料的意思是,一旦我将字符串传递给函数,它就会开始用垃圾值填充 ReversedString 变量,直到超出范围。
这就是程序崩溃的原因:
InputString "the brown fox died"
ReversedString " died fox died brownÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ"
j 9
i 3
EndOfGroup 3
k 20
这不是一个重复的问题,因为我的方法与现有的方法不同。
最佳答案
想想内循环,
for (int j = i; j >= EndOfGroup && j < InputString.length(); j++)
对于第一个词,这很好,现在对于第二个词 - 条件是否正确?
请记住,您正在使用递增索引k
...写入反转的字符串...
关于c++ - 这些垃圾值从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37727074/