将值传递到循环内的数组

时间:2019-02-05 01:20:00

标签: c++ arrays c++11 visual-c++

我正在尝试用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;
}

1 个答案:

答案 0 :(得分:2)

这两个字符串有问题。您已经不必要地将它们声明为每个具有一个元素的数组,并将每个字符串初始化为空。

string digito[] = { "" };
string signo[]={""};

然后,您将使用非零索引对其进行索引:

digito[i] = entrada[i];

此行有问题,原因有两个:超出数组范围和不兼容的类型。

digito[i]std::string的类型(因为digitostd::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  = " + / "

一个一致的,强类型的数据模型将使得编写正确的代码更容易得多,正确的代码可以生成它并随后对结果进行运算。