C++ 代码中的意外值以及如何修复它
我的任务: 老师写下了多个数字的和。学生们应该计算总数。为了简化计算,总和只包含数字1、2和3。不过,这对Xenia来说还不够。她才刚开始计数,所以只有当总和按非递减顺序排列时,她才能计算总和。例如,她不能计算和1+3+2+1,但她可以计算和1+1+2和3+3 你得到了写在黑板上的总数。重新排列传票并打印金额,以便Xenia可以计算金额 输入 第一行包含一个非空字符串s—Xenia的总和需要计数。字符串s不包含空格。它只包含数字和字符“+”。此外,字符串s是数字1、2和3的正确和。字符串s的长度最多为100个字符 输出 打印Xenia可以计算的新金额 示例: 输入C++ 代码中的意外值以及如何修复它,c++,string,C++,String,我的任务: 老师写下了多个数字的和。学生们应该计算总数。为了简化计算,总和只包含数字1、2和3。不过,这对Xenia来说还不够。她才刚开始计数,所以只有当总和按非递减顺序排列时,她才能计算总和。例如,她不能计算和1+3+2+1,但她可以计算和1+1+2和3+3 你得到了写在黑板上的总数。重新排列传票并打印金额,以便Xenia可以计算金额 输入 第一行包含一个非空字符串s—Xenia的总和需要计数。字符串s不包含空格。它只包含数字和字符“+”。此外,字符串s是数字1、2和3的正确和。字符串s的长度
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;
}
}
#包括
#包括
使用名称空间std;
int main()
{
弦素;
中国>>苏;
温度;
n=su.size();
对于(int i=0;i 对于(int i=0;i首先执行s[i]='0'非常危险,因为它是一个字符串,您应该改为执行int myNum=s[i]-'0',然后尝试将其存储在字符串中,因为执行s[i]-='0'它永远不会被转换成整数,但它始终是字符,因此如果你不将它转换成整数,它将变成ascii码'1'-'0'好的,那是1,哪个符号的ascii码是1?哦,它是SOH字符…它接受SOH字符并将其放入字符串中,但字符串不知道什么是SOH,所以就这样???…(只是开玩笑,弦没有感情)所有的笑话都可能是由于你试图在字符串中存储非法字符引起的。我会把“1”-“0”转换成int。然后将它存储在一个字符串中。< /p>使用<代码> cOut@ ANASTACIU。这是一个很好的工作。但是这个函数是什么?它是C++样式的,它有点类似于<代码>(int)SU[i]。
,但使用起来比较安全。您的算术运算会给您代码为1、2和3的不可打印字符,您需要将它们转换为int
,以获得它们的整数值。@anastaciu我知道了,谢谢。您是对的。这对我来说是非常有用的信息。谢谢您的帮助。