我编写了这个函数来反转字符串中单词的顺序,该函数按预期运行,直到它读取了两个单词然后开始出现意外行为:
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
这不是一个重复的问题,因为我的方法与现有的方法不同。
答案 0 :(得分:1)
您只在符合space
标志
if (isspace(InputString[i]))
{
//start of copying...
这意味着你不会复制第一部作品(the
字之前没有空格)。
resize()
方法填充字符串null
字符(due to reference)并且它们可能显示为
ÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ
你需要处理第一个单词
for (int i = InputString.length(); i >= 0; i--){
if (isspace(InputString[i]) || i == 0)
使用
提供一些默认char
而不是null也是一件好事
ReversedString.resize(InputString.size(), ' ');
答案 1 :(得分:1)
考虑内循环,
for (int j = i; j >= EndOfGroup && j < InputString.length(); j++)
对于第一个词,这是好的,现在对于第二个词 - 条件是否正确?
请记住,您正在使用递增索引k
...