找到字符串中的元音不起作用

时间:2017-02-17 21:24:31

标签: c++ string

我的程序检查输入字符串是否包含元音。如果没有找到元音,则打印出#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;。

1 个答案:

答案 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您希望somethingbool。在这种情况下,您应该将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}