我如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?
How do i take user input of an Arithmetic Expression like 5-8+7*4-8+9 or 1+5?
我正在解决寻找算术表达式最大值的问题。但是我在输入表达式时遇到问题,因为没有固定的字符。
输入格式:
- 输入的唯一一行包含一个长度为2n+1的字符串s
一些 n,符号为 s0 , s1 , . . . , s2n.
- s的偶数位置的每个符号都是一个数字(即0到9的整数)
- 而奇数位置的每个符号都是来自{+,-,*}的三个操作之一。
但我的解决方案需要不同数组中的数字和符号(int 数组中的数字和 char 数组中的操作)。
我最初是这样实现的:
string s;
std::cin >> s;
n=s.size();
cout<<"n= "<<n<<endl;
vector<long long> no;
vector<char> ops;
for(int i = 0; i <n; i++)
{
if(i%2==0)
{
no.push_back(s[i]);
}
else{
ops.push_back(s[i]);
}
}
但是我无法获得所需的输入,而是得到这个:
INPUT:
5-8+7*4-8+9
OUTPUT:
n = 11
no[0] = 53
no[1] = 56
no[2] = 55
no[3] = 52
no[4] = 56
no[5] = 57
ops[0] = -
ops[1] = +
ops[2] = *
ops[3] = -
ops[4] = +
我也尝试了另一种解决方案:
vector<long long> no;
vector<char> ops;
int i=0;
while(cin)
{
cout<<"i= "<<i<<endl;
if(i%2==0)
{
int s;
cin>>s;
if(s=='[=12=]')
{
exit();
}
cout<<"s= "<<s<<endl;
no.push_back((int)s);
cout<<"no= "<<no[i/2]<<endl;
}
else
{
char s;
cin>>s;
if(s=='[=12=]')
{
exit();
}
cout<<"s= "<<s<<endl;
ops.push_back(s);
cout<<"ops= "<<ops[(i-1)/2]<<endl;
}
i++;
}
但这会进入无限循环。
请帮帮我
你的输出似乎是正确的,但正如评论中已经提到的,你的值被读取为字符,而不是数字,因此需要进行转换。
为了做到这一点,了解在 ASCII 中,数字具有以下值可能会有所帮助:
Character ASCII-code value
'0' 48 0
'1' 49 1
'2' 50 2
'3' 51 3
'4' 52 4
'5' 53 5
'6' 54 6
'7' 55 7
'8' 56 8
'9' 57 9
如何从字符值中取出值?简单:
value(<character>) = ASCII_code(<character>) - ASCII_code('0'), or:
= ASCII_code(<character>) - 48
我正在解决寻找算术表达式最大值的问题。但是我在输入表达式时遇到问题,因为没有固定的字符。
输入格式:
- 输入的唯一一行包含一个长度为2n+1的字符串s 一些 n,符号为 s0 , s1 , . . . , s2n.
- s的偶数位置的每个符号都是一个数字(即0到9的整数)
- 而奇数位置的每个符号都是来自{+,-,*}的三个操作之一。
但我的解决方案需要不同数组中的数字和符号(int 数组中的数字和 char 数组中的操作)。
我最初是这样实现的:
string s;
std::cin >> s;
n=s.size();
cout<<"n= "<<n<<endl;
vector<long long> no;
vector<char> ops;
for(int i = 0; i <n; i++)
{
if(i%2==0)
{
no.push_back(s[i]);
}
else{
ops.push_back(s[i]);
}
}
但是我无法获得所需的输入,而是得到这个:
INPUT:
5-8+7*4-8+9
OUTPUT:
n = 11
no[0] = 53
no[1] = 56
no[2] = 55
no[3] = 52
no[4] = 56
no[5] = 57
ops[0] = -
ops[1] = +
ops[2] = *
ops[3] = -
ops[4] = +
我也尝试了另一种解决方案:
vector<long long> no;
vector<char> ops;
int i=0;
while(cin)
{
cout<<"i= "<<i<<endl;
if(i%2==0)
{
int s;
cin>>s;
if(s=='[=12=]')
{
exit();
}
cout<<"s= "<<s<<endl;
no.push_back((int)s);
cout<<"no= "<<no[i/2]<<endl;
}
else
{
char s;
cin>>s;
if(s=='[=12=]')
{
exit();
}
cout<<"s= "<<s<<endl;
ops.push_back(s);
cout<<"ops= "<<ops[(i-1)/2]<<endl;
}
i++;
}
但这会进入无限循环。
请帮帮我
你的输出似乎是正确的,但正如评论中已经提到的,你的值被读取为字符,而不是数字,因此需要进行转换。
为了做到这一点,了解在 ASCII 中,数字具有以下值可能会有所帮助:
Character ASCII-code value
'0' 48 0
'1' 49 1
'2' 50 2
'3' 51 3
'4' 52 4
'5' 53 5
'6' 54 6
'7' 55 7
'8' 56 8
'9' 57 9
如何从字符值中取出值?简单:
value(<character>) = ASCII_code(<character>) - ASCII_code('0'), or:
= ASCII_code(<character>) - 48