【发布时间】:2020-12-17 01:08:50
【问题描述】:
用户输入类似“3+2+1”或“1+3+2+1+3+1”的字符串。我只需要对字符串进行排序。但是在出现 4-5 个测试用例后出现错误。
Input - 2
Output - �
Input - 2+1+2+2+2+3+1+3+1+2
Output - �+1+1+1+2+2+2+2+2+3
#include<iostream>
using namespace std;
int main()
{
string s;
cin>>s;
for(int i=0;i<s.size();i+=2)
{
for(int j=0;j<(s.size()-i);j+=2)
{
if(s[j]>s[j+2])
{
swap(s[j],s[j+2]);
}
}
}
cout<<s;
return 0;
}
【问题讨论】:
-
欢迎来到 SO!您的内部循环运行到
size,并且在此循环内您访问超出范围的size-1+2。你想在这里完成什么?如果要按字母顺序对字符串进行排序,请使用std::sort。 -
这里有个提示,不要使用
s[j],而是使用s.at(j)。不同的是,如果j对于s和at来说太大了,你会抛出异常,所以你会知道有问题。使用s[j],如果j太大,结果是不可预测的。 -
或者打开标准库的调试模式,这可能会在索引调用时给你一个硬错误。或者使用地址清理程序进行编译,以捕获可能漏掉的内存错误。
-
您似乎正在研究冒泡排序实现,但始终得到增加(通常为
i++或i+=1或ì=i+1`)错误并且增加太多,即增加2 . 你能解释一下你的代码非常奇怪的地方吗?没有这个问题就不清楚了。 -
@Yunnosch 我认为
+2是因为OP只想对表达式的数字进行排序(因此他们忽略了多位数字的可能性)。