【问题标题】:Passing values ​to an array within a loop将值传递给循环内的数组
【发布时间】:2019-06-28 19:29:15
【问题描述】:

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

【问题讨论】:

  • 英语,请。
  • Hector, lo he convertido a inglés, pero es posible que desees comprobarlo, ya que usé Google Translate, que es notoriamente poco confiable。 Alternativamente, hay un sitio SO en español si prefiere su idioma nativo: es.stackoverflow.com
  • 我把它翻译成英文了! @paxdiablo(西班牙语,我的母语)。

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


【解决方案1】:

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

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

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

digito[i] = entrada[i];

这条线有问题有两个原因;超出数组范围和不兼容的类型。

digito[i]std::string 的类型(因为digitostd::string[]),而entrada[i]char(假设entradastd::string)。 std::stringoperator= 有一个重载,允许分配给单个字符,但我认为这不是你想要的。

至于第二个问题,std::string 要求您先放大它,然后再在给定索引处随机访问它。在这种情况下,最好的方法是在构造过程中,放弃错误的数组使用:

std::cin >> entrada;
std::string digito(entrada.size(), ' ');
std::string signo(entrada.size(), ' ');

话虽如此,我不确定这段代码是否符合您的要求。给定一个输入字符串:

2+2/3

你会得到两个这样的字符串:

digito = "2 2 3"
signo  = " + / "

如果您的实际目标是对输入进行标记(划分为数字和运算符),更好的方法是使用两个std::vector&lt;char&gt;s,或者甚至更好:

using Number = int;
enum class Operator { Plus, Minus, Div, Mul };
using Token = std::variant<Number, Operator>
using Sequence = std::vector<Token>;

一致的强类型数据模型将更容易编写正确的代码来生成它并在之后对结果进行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 2021-03-13
    • 2023-04-10
    • 2019-01-14
    • 2019-03-06
    • 1970-01-01
    • 2020-04-26
    • 2019-05-22
    相关资源
    最近更新 更多