为什么会出现垃圾价值?

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; 
}

希望您能理解代码。