簡體   English   中英

為什么垃圾值會出現?

[英]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; 
}

希望你理解代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM