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

Adding char which is a math operator to random string

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

假设我有字符串“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();
        }
    }
}

从您提供的代码中,我发现一个问题会导致最后一个字符无法打印。这是因为当下一个字符是 space 时,您只打印 tmp。所以“12 3 +”会打印“12”、“3”。然后 tmp 包含值“+”,因为它从未打印或清除,但从未打印过。如果您的输入字符串是“12 3 +”(注意 space),也会打印“+”字符。

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

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

问题是 + 是你的最后一个字符,所以你不会进入 else 块。

std::cout temp 循环后将显示您缺少的字符:

Demo