将作为数学运算符的char添加到随机字符串

时间:2019-01-23 15:13:49

标签: c++ string char add

我试图将“ +”,“-”,“ *”等添加到字符串中,但是它不起作用。

让我们说我有字符串“ 12 3 +”,然后使用string tmp获取空格之间的值,例如“ 12”“ 3”“ +”。我的cout打印“ 12”和“ 3”,但是缺少“ +”

int ONP() {

    string wyrazenie;
    getline(cin, wyrazenie);

    string tmp;

    for (int i = 0; i < wyrazenie.length(); ++i) {

        if (!isspace(wyrazenie[i])) {
            tmp += wyrazenie[i];

        } else {
            cout << tmp << endl;
            SOME CODE.....
            tmp.clear();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

问题是+是您的最后一个字符,因此您不会在else块中进入它。

std::cout temp在循环后将显示您丢失的字符:

Demo

答案 1 :(得分:0)

从您提供的代码中,我看到一个问题,该问题会导致最后一个字符无法打印。这是因为仅当下一个字符为空格时才打印tmp。因此,“ 12 3 +”将打印“ 12”,“ 3”。然后tmp包含值“ +”,因为它从未打印或清除,但从未打印过。如果您输入的字符串是“ 12 3 +”(注意空格),也会打印出“ +”字符。

如果tmp仍然包含任何数据,则可以在循环完成后通过打印并清除tmp来解决。

答案 2 :(得分:0)

您的循环将永远不会显示字符串的最后一个标记,除非字符串以空格结尾。当您拥有"12 3 +"时,您会在12中看到一个空格,请打印12并清除字符串。您对3执行相同的操作。然后,您会得到+,但是由于它是字符串中的最后一个字符,因此您永远不会运行if语句的else部分来将其打印出来。您可以通过几种方法解决此问题。您可以检查循环后temp是否不为空,如果不是,则进行处理。您可以在循环中重做逻辑,以处理最后一个字符(不是空格)时的情况。您可以在输入的末尾添加一个空格,这样它将以一个空格结束,并且循环按原样工作。