【问题标题】:Adding char which is a math operator to random string [closed]将作为数学运算符的 char 添加到随机字符串 [关闭]
【发布时间】:2019-01-23 15:13:49
【问题描述】:

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

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

【问题讨论】:

标签: c++ string char add


【解决方案1】:

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

std::couttemp 在循环之后会显示你丢失的字符:

Demo

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        相关资源
        最近更新 更多