第一次发帖,如果我违反协议(protocol),我深表歉意。
我正在为学校开发一个愚蠢的程序,我有以下代码。
<pre><code>cout << "//Dictionary Program//\n\n";
cout << "Enter a command:\n's' - to search for a pattern at the beginning\n";
cout << "'e' - to search for a pattern at the end\n";
cout << "'c' - to search for a pattern anywhere in the word\n";
//Gather user input.
cout << "Please enter a command ('q' to quit): ";
cin >> userCommand;
cmdCheck = userCommand.find("secq");
while(cmdCheck < 0 || userCommand.length() > 1){
cout << "Please enter a valid command\n";
cin >> userCommand;
cmdCheck = userCommand.find("secq");
}
</code></pre>
这是在驱动一个菜单,我正在尝试验证输入。它应该是一个字母,并且是以下“secq”之一
我在立即窗口中使用 string.find() 时遇到了麻烦。我最终得到 CXX0047:错误:参数列表与函数不匹配。我根本不明白,因为我在其他地方使用它。
while 条件对我不好。当我给程序一个“v”时,它会像它应该的那样在 block 内结束,但随后我给它一个“s”,其中 cmdCheck 应该评估为 0,但它给出 -1 并留在 block 内。
最后,我用 cmdCheck 编写了另一个错误代码,但我在 while 条件下遇到了这个错误,但它也没有工作。
while(userCommand.find("secq") < 0 ...
我最初的想法是输入缓冲区有问题,但是当我在 Locals 窗口中查看 userCmd 变量时,我有一个大小为 1 的字符数组。缓冲区中只有字母,没有垃圾(据我所知可以告诉)
我知道我可以绑一堆 ||连同每个命令,但在我看来这更优雅一些。我看了去年的期末考试,我的条件很丑。在这一点上,这更像是一个原则问题。
最佳答案
表达式 userCommand.find("secq")
试图在 userCommand
中找到字符串 "secq"
。从它的声音来看,你实际上想要做完全相反的事情,即在字符串 "secq"
中找到 userCommand
:
std::string::size_type cmdCheck = std::string("secq").find(userCommand);
while (cmdCheck == std::string::npos) {
...
}
另请注意,std::string
不会返回 int
。相反,它返回一个 std::string::size_type
。这可能是 int
的 typedef
,但它也可能是不同整数类型的 typedef
。如果找不到传递给 find()
的字符串,则返回 std::string::npos
。此常量的确切值也未定义,因此您最好与此常量进行比较,而不是做出任何假设。
关于c++ - 字符串操作和奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236068/