【问题标题】:Finding a substring from input从输入中查找子字符串
【发布时间】:2014-10-13 02:44:08
【问题描述】:

对于我的项目,输入选项之一是“I n”,其中 n 是一个数字。我试图从子字符串中获取“I”的 if 语句中的输入,然后获取最终使用 stringstream 将其转换为整数的数字。

这是我现在的测试代码:

#include <iostream>

using namespace std;

int main(int argc, const char * argv[])
{
    cout << "Type in \"I 2\": " << endl;
    string in = "";
    string numstr = "";

    while(in != "Q" && in != "q")
    {
        cin >> in;

        //Input cases
        if(in.substr(0,1) == "I")
        {
            numstr = in.substr(1,1); //numstr is the number in string form
            cout << in << "+" << numstr << endl; //I want it to output "I+2"
                                                //but it outputs "I+"
        }
        else
        {

            cout << "That was not an option. Try again." << endl;
        }

    }
    return 0;
}

现在的输出是:

I+
That was not an option. Try again.

我可以改变什么让它识别“2”?当我将子字符串更改为 (2,1) 时,我得到一个 out_of_range 异常

【问题讨论】:

  • cin &gt;&gt; in 最多读取第一个空白字符。所以,它只是读取'I'。该数字仍在输入流中,等待读取。
  • 非常感谢。我已经尝试弄清楚这个程序 8 个小时了,这是困扰我的最后一件事

标签: c++ if-statement input substring substr


【解决方案1】:

几个 cmets,由于我有一段时间没有编程,这可能是不正确的,但建议不要使用 != 进行字符串比较,我认为使用 !in.equalsIgnorecase("Q "),那么对于你的 if 语句 in.startsWith("I") 然后不是 1,1,我认为它应该是 1,2(或者可能是 2,3?),但是你的东西说 2,1,这是没有意义的。希望有帮助。下面是我的设置方法!

while(!in.equalsIgnoreCase"q")
{
        cin >> in;

        //Input cases
        if(in.startsWith("I")
        {`enter code here`
            numstr = in.substring(1,2); //maybe in.substring(2,3), if original doesn't work
            cout << in << "+" << numstr << endl; //I want it to output "I+2"
        }
}

【讨论】:

  • Igor Tandetnik 发现了我的问题,这是 cin >> in 只读取到第一个空白字符。 substring 的第二个参数是它走多远,而不是它停止的地方。所以 2,1 意味着它从第 2 个字符开始,到第 1 个字符。我认为它就像在Java中一样。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2011-07-13
  • 2021-03-19
  • 1970-01-01
相关资源
最近更新 更多