为什么显示垃圾值?

用户输入类似“ 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;
}

iCMS 回答:为什么显示垃圾值?

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

希望您能理解代码。

本文链接:https://www.f2er.com/1665646.html

大家都在问