我的代码中的意外价值以及我如何修复它

unexpected value in my code and how I fix it

本文关键字:何修复 代码 意外 我的      更新时间:2023-10-16

我的作业:

老师写下了多个数字的总和。学生应计算总和。为了使计算更容易,总和仅包含数字 1、2 和 3。不过,这对Xenia来说还不够。她才刚刚开始计数,所以只有当总和按非递减顺序跟随时,她才能计算总和。例如,她无法计算总和 1+3+2+1,但可以计算总和 1+1+2 和 3+3。

你有写在黑板上的金额。重新排列传票并打印总和,以便 Xenia 可以计算总和。

输入第一行包含一个非空字符串 s — Xenia 需要计算的总和。字符串 s 不包含空格。它仅包含数字和字符"+"。此外,字符串 s 是数字 1、2 和 3 的正确和。字符串 s 最多包含 100 个字符。

输出打印 Xenia 可以计算的新总和。

例子:

输入

3+2+1  

输出

1+2+3

这是我的解决方案:

#include<string>
#include <iostream>
using namespace std;
int main()
{
string su ;
cin >> su;
int n, temp ;
n = su.size();

for (int i = 0 ; i < n ; i+=2)
{
if (su[i]=='1')
{
su[i]-='0';
}
else if (su[i]=='2')
{
su[i]-='0';
}
else if ( su[i]== '3')
{
su[i]-='0';
}
}
for (int i =0 ; i <n ; i+=2)
{
for(int j = 0 ; j< n; j+=2 )
{
if (su[i]< su [j])
{
temp = su[i];
su[i]=su[j];
su[j]=temp;
}
}
}
for(int i = 0 ; i < n ; i++)
{
if(su[i]=='+')
{
cout<<su[i];
}
else
cout<<su[i];//this is the line I can't understand why the result like that;
}

}

问题是当我使用输入运行代码时3+2+1我希望输出是1+2+3+但我?+?+?类似的东西,我无法理解原因。

首先做 s[i] -= '0' 是非常危险的,因为它是一个字符串,你应该做 int myNum = s[i] - '0'代替,然后尝试将其存储在字符串中,因为当你做 s[i] -= '0' 时,它永远不会被转换为整数,但它一直保持字符,所以如果你不把它转换为整数, 它将变为 ASCII 代码"1"-"0",好的,即 1,哪个符号的 ASCII 代码为 1?哦,这是SOH角色...它采用SOH字符并将其放入字符串中,但是您的字符串不知道SOH是什么,因此它???..(开个玩笑,字符串没有情绪(。除了奇怪的行为之外,所有笑话可能是由于您试图在字符串中存储非法字符引起的。我会先将"1"-"0"转换为 int....然后将其存储在字符串中。