我的程序检查输入字符串是否包含元音。如果没有找到元音,则打印出#34; not found"。
string stringInput;
cout << "Enter a sentence: ";
cin >> stringInput;
if ((stringInput.find('a')) || (stringInput.find('e')) || (stringInput.find('i')) ||
(stringInput.find('o')) || (stringInput.find('u')) != string::npos)
{
cout << "not found";
}
else
{
cout << "found";
}
无论输入如何,每次我运行程序时,都会打印&#34;找不到&#34;。
答案 0 :(得分:1)
那是因为string::find
没有返回bool
。它返回一个迭代器找到的元素。如果未找到该元素,则返回string::npos
。执行此操作的适当方法是检查函数是否返回了除string::npos
以外的其他内容。
看一下这个例子:
std::string Name = "something";
if(Name.find('g') != std::string::npos) std::cout << "Found the letter 'g'!";
else std::cout << "There is no letter 'g' in the string Name.";
如果你理解上面的例子,我相信你将能够编辑你的代码并获得预期的结果。
编辑:正如 Tobi303 所提到的,问题在于只有!= string::npos
的一个实例。创建逻辑语句的something || something || something
您希望something
为bool
。在这种情况下,您应该将string::find
的 EACH 实例与string::npos
进行比较。这看起来像这样:
if((stringInput.find('a')) != std::string::npos || (stringInput.find('e')) != std::string::npos || (stringInput.find('i')) != std::string::npos || (stringInput.find('o')) != std::string::npos || (stringInput.find('u')) != string::npos){//code}