我想做的事情非常非常简单。逐个字符读取字符串,并将数字写入一个单独的字符串,同时在字符串之间留出一个空格。
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++标准要求一个名为短路的功能。如果逻辑运算的结果可以在不评估所有操作数的情况下确定,那么就应该这样做
- 在表达式
a || b
(a或b(中,如果a
是true
,则表达式也必须是true
,而b
是无关的 - 在表达式
a && b
(a和b(中,如果a
是false
,则表达式也必须是false
,并且b
是无关的
由于短路,只要isdigit(c)
是true
,就不会对c == '.' && i < line.size()
进行评估。因此,你永远不知道自己是否已经在字符串之外。
你可以通过使用对你的优势的短路来修复你的环路:
while (i < line.size() && (isdigit(c) || c == '.'))