为什么会出现垃圾价值?
Why garbage value showing up?
用户输入“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;
}
正如 ggorlen 所说,出现垃圾是因为您正在访问一个超出范围的值。在进行任何交换之前,请尝试检查您的“j”索引加 2 是否超出范围。
#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(j+2 < s.size() && s[j]>s[j+2])
{
swap(s[j],s[j+2]);
}
}
}
cout<<s;
return 0;
}
输入2+1+2+2+2+3+1+3+1+2
输出1+1+1+2+2+2+2+2+3+3
j 的值超出范围。尝试使用插入排序:
#include <bits/stdc++.h>
using namespace std;
void insertionSort(string s)
{
int key, j;
for (int i = 1; i < s.size(); i++)
{
key = s[i];
j = i - 1;
while (j >= 0 && s[j] > key)
{
s[j + 1] = s[j];
j = j - 1;
}
s[j + 1] = key;
}
for (int i = 0; i < s.size(); i++)
cout << s[i] << " ";
cout << endl;
}
int main()
{
string s;
cin>>s;
insertionSort(s);
return 0;
}
希望您能理解代码。
用户输入“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;
}
正如 ggorlen 所说,出现垃圾是因为您正在访问一个超出范围的值。在进行任何交换之前,请尝试检查您的“j”索引加 2 是否超出范围。
#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(j+2 < s.size() && s[j]>s[j+2])
{
swap(s[j],s[j+2]);
}
}
}
cout<<s;
return 0;
}
输入2+1+2+2+2+3+1+3+1+2
输出1+1+1+2+2+2+2+2+3+3
j 的值超出范围。尝试使用插入排序:
#include <bits/stdc++.h>
using namespace std;
void insertionSort(string s)
{
int key, j;
for (int i = 1; i < s.size(); i++)
{
key = s[i];
j = i - 1;
while (j >= 0 && s[j] > key)
{
s[j + 1] = s[j];
j = j - 1;
}
s[j + 1] = key;
}
for (int i = 0; i < s.size(); i++)
cout << s[i] << " ";
cout << endl;
}
int main()
{
string s;
cin>>s;
insertionSort(s);
return 0;
}
希望您能理解代码。