我不明白我是如何在这里超出范围的错误



我想做的事情非常非常简单。逐个字符读取字符串,并将数字写入一个单独的字符串,同时在字符串之间留出一个空格。

Ex。原始字符串:";45+67-32";变成";45 67 32〃;

这是我的逻辑:

while (i < line.length())
{
char c = line.at(i);
if (isdigit(c))
{
c = line.at(i);
while (isdigit(c) || c == '.' && i < line.size())
{
expression = expression + line.at(i);
i++;
}
expression = expression + ' ';
}
i++;
}

C++标准要求一个名为短路的功能。如果逻辑运算的结果可以在不评估所有操作数的情况下确定,那么就应该这样做

  1. 在表达式a || b(a或b(中,如果atrue,则表达式也必须是true,而b是无关的
  2. 在表达式a && b(a和b(中,如果afalse,则表达式也必须是false,并且b是无关的

由于短路,只要isdigit(c)true,就不会对c == '.' && i < line.size()进行评估。因此,你永远不知道自己是否已经在字符串之外。

你可以通过使用对你的优势的短路来修复你的环路:

while (i < line.size() && (isdigit(c) || c == '.'))

最新更新