[英]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.