std :: string :: find()的问题

时间:2010-11-28 22:53:04

标签: c++

我在使用std :: string :: find()时遇到了麻烦。我通过以下代码从控制台读取字符串:

 50   while(command.find(exitString) != 0) {
 51         std::cout << "$ ";
 52         getline(std::cin, command);
 53 
 54         doSwitch(command);
 55     }

然后我通过以下功能“切换”它们:

 59 void Console::doSwitch(std::string command) {
 60     if(command.find(helpString) == 0) {
 61         help();
 62     } else if(command.find(loadString) == 0) {
 63         try {
 64             doLoad(command);
 65         } catch(std::string str) {
 66             std::cout << str << std::endl;
 67         }
 68     } else if(command.find(dumpProcString) == 0) {
 69         try {
 70             doDumpProc(command);
 71         } catch(std::string str) {
 72             std::cout << str << std::endl;
 73         }
 74     } else if(command.find(dumpMemString) == 0) {
 75         doDumpMem();
 76     } else if(command.find(defmemString) == 0) {
 77         try {
 78             doDefmem(command);
 79         } catch(std::string str) {
 80             std::cout << str << std::endl;
 81         } catch(char *str) {
 82             std::cout << str << std::endl;
 83         }
 84     } else if(command.find(resetString) == 0) {
 85         try {
 86             doReset();
 87         } catch(std::string str) {
 88             std::cout << str << std::endl;
 89         }
 90     } else {
 91         std::cout << "Comando inválido." << std::endl;
 92     }
 93 }

但有时它根本无法正确切换。有线索吗?

提前致谢,

编辑: 我已经完成了一些测试,我发现它落在了最后一个else-if语句上,而不是落在最后一个上面。 然后我再次检查了我的代码,发现根本原因是我忘了初始化resetString。 问题解决了! 谢谢大家。

2 个答案:

答案 0 :(得分:5)

您可能希望find在找到字符串时返回零,有点像strcmp的工作方式。

但这不是find的工作方式。 find返回找到的字符串的第一个索引,该索引可能为零,如果您要查找的字符串前面有空格,其他字符串等,则可能是其他索引。

如果find 没有找到您要查找的内容,则会返回string::npos。所以你的if ... else块应该检查是否找到了找到的字符串,而不是检查它们是否在索引零处。像这样:

if(command.find(helpString) != string::npos ) {
          help();
      } else if /// ... etc...

答案 1 :(得分:0)

您正在读取一行,然后调用doSwitch()而不检查其exitString。在这种情况下,当输入是exitString时,执行doSwitch()函数结束时的else块,导致程序在退出循环之前打印“Command Invalido”。

这是你观察到的吗?

如果是其他内容,请告诉我们您的代码输入错误的输入以及输入和输出是什么。