我正在尝试取一个用户输入的字符串,遍历字符串中的每个字符,然后只打印元音。
我已经发布了到目前为止我所拥有的内容,但当然它所做的只是输出字符串中的第一个字符,无论它是否是元音(只是FYI,这是一个类,所以我'我不是在找人给我答案,但我肯定需要一些指导!)
#include <iostream>
#include <cstdlib>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
string userString;
char vowels = ('a','e','i','o','u');
char stringArr = userString[0];
cout << "Enter some text: ";
cin >> userString;
cout << endl;
if (stringArr == 'a'|'e'|'i'|'o'|'u')
cout << userString[0] << " " << endl << endl;
else
cout << "No vowels found.";
return 0;
}
答案 0 :(得分:0)
首先,您的数组声明语法不正确。
由于您使用的是C ++,因此您应该将内置array
类用于静态(固定长度)数组。
初始化数组的正确方法是使用以下语法:
std::array<char, 5> vowels = { 'a', 'e', 'i', 'o', 'u' };
接下来,这种语法也没有按照你的想法行事:
if (stringArr == 'a'|'e'|'i'|'o'|'u')
|
实际上是一个二进制文件,或者意味着它正在进行位操作,这不是你想要的。另外,你声明元音然后重新陈述这个if语句中的所有元音是很奇怪的。 不要重复自己!使用您已经制作的列表并搜索它。它使您的代码更容易维护。
搜索array
(以及许多其他容器类)的标准方法是使用find
函数。
c = 'a'; // some character
find(vowels.begin(), vowels.end(), c) != vowels.end()
这意味着如果在true
中找到c
,它将返回vowels
。
所以现在我们只需要浏览所有用户输入的字符串的字符。为此,您需要使用循环。在C ++中,有一种称为range-based for
loop的东西。语法如下:
for (auto c : user_string)
{
// do something with c
}
这将迭代整个字符串,并为每个字符执行块({ }
)内的代码。
以下是完全符合您要求的工作代码:
#include <iostream>
#include <cstdlib>
#include <string>
#include <iomanip>
#include <array>
#include <algorithm>
using namespace std;
int main()
{
bool vowels_found = false;
string user_string = "yea man";
array<char, 5> vowels = { 'a', 'e', 'i', 'o', 'u' };
for (auto c : user_string)
{
if (find(vowels.begin(), vowels.end(), c) != vowels.end())
{
cout << c;
vowels_found = true;
}
}
if (!vowels_found)
{
cout << "No vowels found.";
}
return 0;
}
答案 1 :(得分:0)
看来你的意思如下:)
#include <iostream>
#include <string>
int main()
{
while ( true )
{
std::cout << "\nEnter some text (Enter - exit): ";
std::string userString;
if ( !std::getline( std::cin, userString ) || userString.empty() ) break;
const char *vowels = "AaEeIiOoUu";
bool present = false;
for ( std::string::size_type pos = 0;
( pos = userString.find_first_of( vowels, pos ) ) != std::string::npos;
++pos )
{
if ( !present ) present = true;
std::cout << userString[pos] << ' ';
}
if ( !present ) std::cout << "No vowels found.";
std::cout << std::endl;
}
return 0;
}
程序输出可能看起来像
Enter some text (Enter - exit): Hello World!
e o o
Enter some text (Enter - exit): Hll Wrld!
No vowels found.
Enter some text (Enter - exit): hEllO wOrld!
E O O
Enter some text (Enter - exit):
至于你的代码那么它没有多大意义。:)
例如在此声明中
char vowels = ('a','e','i','o','u');
使用了逗号运算符,变量vowels
将具有值'u'
。
或此声明
char stringArr = userString[0];
使用终止零初始化stringArr
(假设代码编译为C ++ 2011)
或if语句中的条件
if (stringArr == 'a'|'e'|'i'|'o'|'u')
始终评估为true
,因为至少'e'
不等于0.