Warum wird Müll angezeigt?
Aug 28 2020
Der Benutzer gibt eine Zeichenfolge wie '3 + 2 + 1' oder '1 + 3 + 2 + 1 + 3 + 1' ein. Und ich muss nur die Zeichenfolge sortieren. Nach 4-5 Testfällen tritt jedoch ein Fehler auf.
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;
}
Antworten
2 Injourn Aug 28 2020 at 13:01
Wie Ggorlen sagte, wird Müll angezeigt, weil Sie auf einen Wert zugreifen, der außerhalb der Grenzen liegt. Überprüfen Sie, ob Ihr "j" -Index plus 2 außerhalb der Grenzen liegt, bevor Sie einen Swap durchführen.
#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;
}
Eingang 2+1+2+2+2+3+1+3+1+2
Ausgabe 1+1+1+2+2+2+2+2+3+3
NiteLite Aug 28 2020 at 13:11
Der Wert von j geht außerhalb der Grenzen. Versuchen Sie es mit der Einfügesortierung:
#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;
}
Ich hoffe, Sie verstehen den Code.