String C++向量和字符串,元音元音
这个程序应该读一篇文章,并计算元音和辅音的数量。它应该忽略任何非字母字符。结果应该是这样的:String C++向量和字符串,元音元音,string,vector,String,Vector,这个程序应该读一篇文章,并计算元音和辅音的数量。它应该忽略任何非字母字符。结果应该是这样的: Enter your text: I have to TURN this..in before midnight!! a, e, i, o, u, y 1, 3, 5, 2, 1, 0 There are 19 consonants. 但我的代码的结果是: Enter your text: I have to TURN this..in before midnight!! a
Enter your text: I have to TURN this..in before midnight!!
a, e, i, o, u, y
1, 3, 5, 2, 1, 0
There are 19 consonants.
但我的代码的结果是:
Enter your text: I have to TURN this..in before midnight!!
a, e, i, o, u, y
1, 3, 4, 2, 0, 0
There are 31 consonants.
我不知道发生了什么事!!此外,这是一个任务,我必须使用所有这些功能,我不能添加或删除它们!我阅读了其他几种计数和显示数字的方法,但不幸的是,模板被给出了
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
// FUNCTION PROTOTYPES GO HERE:
void init_vectors(vector<char> & vowels, vector<int> & frequencies);
string read_text(const string & prompt);
bool is_alphabetic(const char character);
void create_list(const string & str_text, vector<char> & vec_text);
bool is_member(const vector<char> & list, char character);
int find_index(const vector<char> & list, char character);
int compute_vowel_freqs(const vector<char> & text, const vector<char> & vowels, vector<int> & freqs);
void display_characters(const vector<char> & characters, const int colwidth);
void display_freqs(const vector<int> & freqs, const int colwidth);
int main()
{
vector<char> vowels;
vector<int> freqs;
string input;
vector<char> text;
int consonants(0);
const int COLUMNWIDTH = 2;
init_vectors(vowels, freqs);
input=read_text("Enter your text: ");
create_list(input, text);
compute_vowel_freqs(text, vowels, freqs);
display_characters(vowels, COLUMNWIDTH);
display_freqs(freqs, COLUMNWIDTH);
consonants = compute_vowel_freqs(text, vowels, freqs);
cout<<"There are "<< consonants<< " consonants."<<endl;
return 0;
}
void init_vectors(vector<char> & vowels, vector<int> & frequencies)
{
for (int i(0); i<6; i++) //i is loop variable
{
frequencies.push_back(0);
}
vowels.push_back('a');
vowels.push_back('e');
vowels.push_back('i');
vowels.push_back('o');
vowels.push_back('u');
vowels.push_back('y');
}
string read_text(const string & prompt)
{
string phrase;
cout<<prompt;
getline(cin,phrase);
return phrase;
}
bool is_alphabetic(const char character)
{
bool alphabet;
if ((character > 'a' && character < 'z')||(character > 'A' && character < 'Z'))
{
alphabet = true;
}
return alphabet;
}
void create_list(const string & str_text, vector<char> & vec_text)
{
for( int i = 0 ; i < str_text.length() ; i++)
{
if(is_alphabetic(str_text[i]))
vec_text.push_back(str_text[i]);
}
}
bool is_member(const vector<char> & list, char character)
{
bool vowel;
for (int i(0); i<list.size(); i++)
{
if (character == list[i])
{
vowel=true;
}
}
return vowel;
}
int find_index(const vector<char> & list, char character)
{
int index = -1;
for(int i=0; i<list.size(); i++)
{
if(character == list[i])
{
index = i;
break;
}
}
return index;
}
int compute_vowel_freqs(const vector<char> & text, const vector<char> & vowels, vector<int> & freqs)
{
int num_cons(0);
for(int i = 0 ; i < text.size() ; i++)
{
int index;
if(is_member(vowels, text[i]))
{
index = find_index(vowels , tolower(text[i]));
freqs[index]++;
}
else
num_cons++;
}
return num_cons;
}
void display_characters(const vector<char> & characters, const int colwidth)
{
for(int i=0; i<characters.size(); i++)
{
cout<<setw(colwidth)<<characters[i];
if((i+1)<characters.size())
{
cout<<",";
}
}
cout<<endl;
return;
}
void display_freqs(const vector<int> & freqs, const int colwidth)
{
for(int i=0; i<freqs.size(); i++)
{
cout<<setw(colwidth)<<freqs[i];
if((i+1)<freqs.size())
cout<<",";
}
cout<<endl;
return;
}
您的is_成员始终为false,因此没有字符是元音。结果是0计数
bool is_member(const vector<char> & list, char character)
{
bool vowel = false; # this fix is not obligatory, I just made code look clearer
for (int i(0); i<list.size(); i++)
{
if (character == list[i])
{
vowel=true;
}
}
return vowel; # this should be fixed
}
顺便说一下,函数“is_Alpha顺序”中也存在同样的问题。它总是假的。您的is\u成员总是假的,所以没有字符是元音。结果是0计数
bool is_member(const vector<char> & list, char character)
{
bool vowel = false; # this fix is not obligatory, I just made code look clearer
for (int i(0); i<list.size(); i++)
{
if (character == list[i])
{
vowel=true;
}
}
return vowel; # this should be fixed
}
顺便说一下,函数“is_Alpha顺序”中也存在同样的问题。它总是错误的。如果您在测试任何代码之前编写了数百行代码,那么您肯定会失败。从小事做起,一次增加一点复杂性,每一步都要测试,永远不要添加不起作用的代码 您应该在编写这些函数时逐一测试它们。第一个问题是:
bool is_alphabetic(const char character)
{
bool alphabet;
if ((character > 'a' && character < 'z')||(character > 'A' && character < 'Z'))
{
alphabet = true;
}
return false;
}
您正在使用'>'和'如果您在测试任何代码之前编写了数百行代码,那么您肯定会失败。从小事做起,一次增加一点复杂性,每一步都要测试,永远不要添加不起作用的代码 您应该在编写这些函数时逐一测试它们。第一个问题是:
bool is_alphabetic(const char character)
{
bool alphabet;
if ((character > 'a' && character < 'z')||(character > 'A' && character < 'Z'))
{
alphabet = true;
}
return false;
}
您正在使用“>”和“您的意思是不允许您更改函数声明,也称为签名,但您可以更改它们的定义?我的意思是讲师给我们提供了模板、函数原型以及允许使用的变量的数量和类型!!!你的意思是不允许你更改函数声明,也就是签名,但你可以更改它们的定义?我的意思是讲师给我们提供了模板、函数原型,以及允许我们使用的变量的数量和类型!!!谢谢你,我做了更改,但现在的问题是它没有正确计算它们,我用新的示例代码更新了问题。显然,它不计算大写字母。@user2841098:很好!现在把这个问题追溯到它的根源,修复它,然后再看一看。@user2841098:它在compute_vowell_freqs中;输入正确的文本,但结果频率是错误的。我建议您创建一个局部变量char c=tolowertext[I];然后使用它。是的,刚刚发现并在截止日期前4分钟提交了作业!返回部分总是让我困惑。谢谢你的帮助。但是对于我在is_member和find_indextank u中为字符添加的tolower,我做了更改,但现在的问题是它没有正确地计算它们,我用新的示例代码更新了这个问题,显然它不计算大写字母。@user2841098:很好!现在把这个问题追溯到它的根源,修复它,然后再看一看。@user2841098:它在compute_vowell_freqs中;输入正确的文本,但结果频率是错误的。我建议您创建一个局部变量char c=tolowertext[I];然后使用它。是的,刚刚发现并在截止日期前4分钟提交了作业!返回部分总是让我困惑。谢谢你的帮助。但是对于tolower,我在is_成员和find_索引中为字符添加了tolower