C ++子串错误

时间:2017-12-02 10:08:27

标签: c++ string

所以,我制作了一个让用户输入命令的程序,比如print message 它会告诉他他输入的信息。 例如,如果他输入:print Hello,则控制台的输出将为Hello

现在,这是我的代码:

#include <iostream>
using namespace std;

int main()
{
string command;
start:
cout << ">>> ";
cin >> command;
if (command.substr(0,5) == "print")
{
    if (command.substr(6,command.end) != "")
    {
        cout << command.substr(6,command.end);
        goto start;
    }
    else
    {
        cout << "Usage: print text";
        goto start;
    }
}
}

问题是我收到了错误:

  

没有匹配函数来调用&#39; std :: basic_string :: substr(int,     )&#39; |

并且我不确定我是否正确指定了子串长度。我想要第一个检查前五个单词是否print

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您的错误是您提供command.end作为substr函数的参数,该参数不是有效参数。看起来您要打印command的其余内容,在这种情况下,您只需拨打command.substr(6)

答案 2 :(得分:1)

首先,你忘了写#include <string>。另外,最好不要使用goto运算符和大量magic numbers(代码中为5,6)。对于可以包含空格的读取字符串(来自标准输入),您应该使用getline。在substr中,如果我们想要to get all characters until the end of the string,则省略第二个参数。

我已经重构了您的解决方案并拥有以下代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string command;
  string prompt("print");
  cout << ">>> ";
  while(getline(cin, command) &&
        command.size() >= prompt.size() && 
        command.substr(0, prompt.size()) == prompt)
  {                 
     if (command.size() > prompt.size())
     {
       cout << command.substr(prompt.size() + 1) << endl;
     }
     else
     {
       cout << "Usage: print text" << endl;
     }
    cout << ">>> ";
  }
  return 0;
}