我正在尝试用C ++编写一个计算数学符号数的程序。我正在使用isdigit
来解决这个问题,但是当我传递字符串的值时,它会警告我。
这是我的代码。我认为问题出在digito[i] = entrada[i]
行,但我不明白为什么。
cout << "Input the operation" << endl;
cin >> input;
string digit[] = { "" };
string sign[]={""};
int cn = 0, cs = 0;
for (int i = 0; i < input.size(); i++) {
if (isdigit(input[i])) {
cout << "There is a digit in position " << i << endl;
cn += 1;
digit[i] = input[i];
}
else {
cout << "There is a sign in position " << i << endl;
// sign[i] = input[i];
cs += 1;
sign[i] = input[i];
}
}
将我带到此代码作为问题:
static _CONSTEXPR17 void assign(char& _Left, const char& _Right) noexcept
{ // assign an element
_Left = _Right;
}
答案 0 :(得分:2)
这两个字符串有问题。您已经不必要地将它们声明为每个具有一个元素的数组,并将每个字符串初始化为空。
string digito[] = { "" };
string signo[]={""};
然后,您将使用非零索引对其进行索引:
digito[i] = entrada[i];
此行有问题,原因有两个:超出数组范围和不兼容的类型。
digito[i]
是std::string
的类型(因为digito
是std::string[]
),而entrada[i]
是char
(假设{{1} }是entrada
)。 std::string
的{{1}}的重载允许分配给单个字符,但是我想这不是您想要的。
对于第二个问题,std::string
要求您先放大它,然后再以给定索引随机访问它。在这种情况下,最好的方法是在构造过程中,放弃错误的数组使用:
operator=
话虽这么说,但是我不确定这段代码是否可以实现您想要的功能。给定输入字符串:
std::string
您将获得两个这样的字符串:
std::cin >> entrada;
std::string digito(entrada.size(), ' ');
std::string signo(entrada.size(), ' ');
如果您的 actual 目标是将输入标记化(分为数字和运算符),则更好的方法是使用两个2+2/3
,或者甚至更好:< / p>
digito = "2 2 3"
signo = " + / "
一个一致的,强类型的数据模型将使得编写正确的代码更容易得多,正确的代码可以生成它并随后对结果进行运算。