所以,我制作了一个让用户输入命令的程序,比如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
。
答案 0 :(得分:2)
尝试将command.end
替换为command.length()
。
答案 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;
}