2017-02-17 31 views
-3

我的程序檢查輸入字符串是否包含元音。如果未找到元音,則打印「找不到」。查找元音字符串不工作

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"; 
} 

無論輸入的,每次我運行程序,它打印「找不到」。

+8

你必須做的=每個.find致電 –

+0

提示:看'的std :: string :: find'的返回值。我建議你看看'std :: string :: find_first_of'。 –

+1

'find'返回字符的位置,而不是'true'或'false'。如果未找到該值,它將返回'npos'。 –

回答

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。在這種情況下,您應該比較EACHstring::find的實例與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} 
+0

他有'!= sting :: npos',但只有一次。 – user463035818

+1

似乎像OP知道'find'返回什麼,但不知道如何或幾個條件 – user463035818

+0

@ tobi303,我編輯了答案提及您的輸入。我原本以爲OP期待'string :: find'的'bool'返回值。良好的捕獲 – Fureeish