if (word[0] == 'a'||'e'||'i'||'o'||'u'||'A'||'E'||'I'||'O'||'U')
这不是||
C++ 中的工作方式。但这并不意味着上面会导致编译错误。不,从编译器的角度来看这是正确的;唯一的问题是它没有做你想做的事!相反,条件将始终为true
。这就是为什么它会打印代码中所有单词的第一个字符。
为了得到你想要的,你必须写成||
:
if (word[0] == 'a'|| word[0] == 'e'|| word[0] == 'i' || ... so on)
也就是说,您必须分别比较每个字符。这肯定是令人恼火的。
C++11 已将您从这里拯救出来,因此您可以std::any_of
用作:
//C++11 only
std::string const v = "aeiouAEIOU";
if (std::any_of(v.begin(), v.end(), [](char c){ return word[0] == c;})
或者您可以std::find
用作:
//C++03 and C++11 both
if ( std::find(v.begin(), v.end(), word[0]) != v.end() )
它比前一个短一点。此外,这也适用于 C++03!
或者您可以std::count
用作:
//C++03 and C++11 both
if ( std::count(v.begin(), v.end(), word[0]) )
这甚至更短。
或者您可以std::string::find
用作:
//C++03 and C++11 both
if ( v.find(word[0]) != std::string::npos)
哪个是最短的!
阅读文档以了解他们每个人的真正作用,以及为什么它适用于您的案例:
希望有帮助。