以元音、辅音开头的单词的读数
Posted
技术标签:
【中文标题】以元音、辅音开头的单词的读数【英文标题】:Reading number of word begin with vowels, consonant 【发布时间】:2016-10-19 12:01:43 【问题描述】:所以有一个练习,它应该阅读以元音、辅音和不符合这两个类别的单词开头的单词数。到目前为止,我的代码是:
#include <iostream>
int main()
using namespace std;
char a;
cout << "Enter words (q to quit)\n";
cin.get(a);
int others = 0;
int vowels =0;
int consonant =0;
while (a != 'q')
cin.get(a);
if(isalpha(a))
switch (a)
case 'a':
case 'i':
case 'u':
case 'e':
case 'o':
vowels++;
break;
default:
consonant++;
break;
else
others++;
cout << vowels << " words beginning with vowels\n";
cout << consonant << " words beginning with consonant\n";
cout << others << " others";
return 0;
但它不读取单词的开头。这是一个例子:
输入单词(q 退出)
12 头牛到了 静静地穿过15米的草坪。 q
9 个元音开头的单词
11个以辅音开头的单词
另外 7 个人。
问题出在哪里?
编辑:现在完成了。如果有人感兴趣
#include <iostream>
#include <cstring>
#include <cctype>
int main()
using namespace std;
string a;
cout << "Enter words (q to quit)\n";
int others = 0;
int vowels =0;
int consonant =0;
cin >> a;
while (a != "q")
cin >> a;
if(isalpha(a[0]))
switch (a[0])
case 'a':
case 'i':
case 'u':
case 'e':
case 'o':
vowels++;
break;
default:
consonant++;
break;
else
others++;
cout << vowels << " words beginning with vowels\n";
cout << consonant << " words beginning with consonant\n";
cout << others << " others";
return 0;
感谢大家的建议
【问题讨论】:
您需要对字符串进行标记。看看here。 使用较小的测试用例通常更容易确定问题所在。例如,您可以从“The”和“Ox”开始。 也是一个不错的字符串拆分方法:***.com/a/236803/3652270 真的很奇怪.. 如果我输入“The”,输出是 1 个单词元音,2 个单词辅音,0 个其他单词。即使它不是真的,它也能正确读取元音和辅音。但是当它是“真棒”时,输出是 3 个单词元音,4 个单词辅音,0 个其他单词。它不是真的,它没有正确读取元音和辅音。 dis 代码有问题.. xd 您在 while 之外读取了第一个字符,但您仅使用它来查看它是否不是 'q',然后在进入循环后立即读取另一个字符。仅在 while 循环的条件下尝试读取 char 或更好的单个单词(否则如何区分“quit”和“q”?)。 【参考方案1】:cin.get(a)
读取单个字符(字母)。要阅读一个单词,您可以使用operator >>
和std::string
:
// make a std::string variable to hold a single word
string word;
// later read the word from the standard input
cin >> word;
【讨论】:
【参考方案2】:您正在逐个读取字符,直到您点击“q”并分析所有字符。 如果是我,我可能只是将所有内容连接成 1 个字符串,直到“q”,然后评估该字符串。这可以通过空间分割然后循环结果数组中的所有单词并在每个单词的第一个字符的子字符串上执行您的 switch case 来完成。
【讨论】:
【参考方案3】:您的任务是一次读取一个单词并仅考虑该单词的第一个字母,但您的程序在每次迭代时读取单个字符(使用 cin.getc
)。
此外,第一个字符是在 while 循环之外读取的,并在检查它是否不是 'q' 后立即丢弃。
更适合你的任务可能是这个 sn-p:
#include <iostream>
#include <string>
#include <cctype>
int main()
using std::cout;
int others = 0,
vowels = 0,
consonants = 0;
std::string word;
cout << "Enter words (q to quit)\n";
// read a word at a time till a single 'q'
while ( std::cin >> word && word != "q" )
// consider only the first letter of the word
char c = word[0];
if ( std::isalpha(c) )
if ( c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' )
++vowels;
else
++consonants;
else
++others;
cout << vowels << " words beginning with vowels\n";
cout << consonants << " words beginning with consonant\n";
cout << others << " others";
return 0;
使用您的示例输入测试程序:
The 12 awesome oxen ambled quietly across 15 meters of lawn. q
给:
5 words beginning with vowels
4 words beginning with consonant
2 others
【讨论】:
@asdfg1234 检查您发布的最后一个代码的结果。 不是在你的编译器里吗? 我的输出:5个以元音开头的单词,4个以辅音开头的单词,另外2个 @asdfg1234 考虑第一个单词以元音开头的情况,for example 那是因为我懒得把大写的元音放上 lol xd以上是关于以元音、辅音开头的单词的读数的主要内容,如果未能解决你的问题,请参考以下文章