【发布时间】:2020-10-10 09:54:03
【问题描述】:
我正在解决一个寻找算术表达式最大值的问题。但是我在输入表达式时遇到问题,因为没有固定的字符。
输入格式:
- 输入的唯一行包含长度为 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=='\0')
{
exit();
}
cout<<"s= "<<s<<endl;
no.push_back((int)s);
cout<<"no= "<<no[i/2]<<endl;
}
else
{
char s;
cin>>s;
if(s=='\0')
{
exit();
}
cout<<"s= "<<s<<endl;
ops.push_back(s);
cout<<"ops= "<<ops[(i-1)/2]<<endl;
}
i++;
}
但这进入了无限循环。
请帮帮我
【问题讨论】:
-
“但我无法获得所需的输入,而是得到了这个:” 好的,现在仔细想想它到底出了什么问题。您是否看到
no数组值与您的预期不同的模式?现在,您如何获得放入no的值?您了解这是如何导致问题的吗? -
我可以看到有一种模式,但无法断定为什么会发生这种情况。我想知道如何正确获取
no中的值。 -
如果你尝试类似
int x = '3'; cout << x << endl;会发生什么(注意单引号)?您对 C++ 中的char的实际含义有何理解?你熟悉 ASCII 的概念吗? -
@KarlKnechtel 出色的工作和令人钦佩的耐心。请继续解释。当您在这里创建任何类型的答案时,请告诉我。我会尽我所能认为它是可投票的。 (我注意到你可能已经不再渴望名声了,但是……)
-
谢谢。我明白你在说什么。我忘了进行类型转换,但即使它给出了相同的结果。我的一位朋友现在告诉我使用 ` ( s[i] - '0' ) ` 这解决了我的问题,但为什么将 0 的 ascii 值添加到数字是问题?
标签: c++ arrays input while-loop multiple-input