我无法按照分配的预期提出布尔函数。我只需要一些解释,因为我想编写自己的代码。我应该写一个MIPS代码,实际上计算一个字符串中的大写,小写,元音,辅音和数字的数量。我用C ++编写代码,然后我将转换为MIPS汇编。我粘贴了下面的要求,接着是函数bool consonant(char c)的样子(我的教授给出的想法)。问题是我似乎缺少一些信息来使这个功能起作用。任何人都可以提供有关该功能的更多信息吗?我不需要代码,只需要缺少细节。非常感谢您的帮助。
//下面的任务要求
要确定ASCII字符c是元音还是辅音,请写两个函数bool vowel(char c)和 bool consonant(char c)。使用堆栈将字符参数传递给这些函数。避免长条件 测试角色作为元音和辅音时的表达式。相反,使用两个全局数组 (表)包含实现元音()和辅音()的布尔标志。例如,一个名为的数组 is_vowel对于字符'a'和'A'都是true,对'b'和'B'是false。
// function that returns 0 if c is a consonant, or 1 if c is not a consonant
bool consonant(char c)
{
const bool is_conson[30]={0,0,...1,1,1,0,0...};
return is_conson[c];
}
//Here is The Code (C++) that I wrote for testing purpose only using Dev-C++
#include <iostream>
#include <math.h>
#include <cstdlib>
using namespace std;
bool consonant(char c)
{
const bool is_conso[30]= {1,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0,1};
return is_conso[c];
}
int main()
{
int i;
bool result;
char c;
char sentence[]="aaaabbbbb";
cout<<"the array: ";
cout<<sentence<<endl;
for (i=0; i<9; i++)
{
c=sentence[i];
result=consonant(c);
if (result==0)
cout<<c<<" is a Consonant"<<endl;
}
return 0;
}
答案 0 :(得分:2)
如果您想像bool consonant(char c)
那样致电consonant('a')
,那么您需要先将c
翻译成索引(因为'a'
!= 0
)或使用另一种方法。
在便携式C ++中,您可以使用大switch
:
switch(c) {
case 'b': case'B': case 'c': case 'C': .... return true;
default: return false;
}
在非便携式C ++中,您可以偏移c
:
c = lower_case(c); // <-- left as exercise
const auto array_size = std::end(is_conson) - std::begin(is_conson);
if (c>=0 && c<array_size)
return is_conson[c - 'a']
throw std::logic_error(...);
这是不可移植的,因为C ++标准不要求字符[a..z]
是连续的。我不知道你手头的编译器是否支持这个。
第三种非可移植变体需要单独进行一些特殊初始化,但允许直接索引:
std::array<bool,std::numeric_limits<char>::max()> meh() {
std::array<bool,std::numeric_limits<char>::max()> ret;
ret['a'] = true;
ret['A'] = true;
...
return ret;
}
....
static const auto is_conson = meh();
if (c >= begin(is_conson) && c<= end(is_conson))
return is_conson[c];
throw std::logic_error(....);
非便携式,因为它假设所有辅音都是正面的。然而,它比先前的变体更便携。您还可以通过引入std::numeric_limits<char>::min()
来使其变得可移植。
答案 1 :(得分:0)
目前你的功能不起作用,因为ASCII A是65,你需要增加你的数组以覆盖所有的ASCII字符或减去'A'(它给出A的ASCII值)来将数字缩放到你的阵列。 ASCII a为97,因此必须通过减去'a'
来缩放小写字母答案 2 :(得分:0)
字母由ASCII中的值65到90(大写)和97到122(小写)表示。您正在使用数组,就像它们从索引0开始一样。执行以下操作:
if (c >= 'A' && c <= 'Z')
return is_conson[c-'A'];
if (c >= 'a' && c <= 'z')
return is_conson[c-'a'];
return false;
此外,您应该将is_conson
数组声明为static
,以便它只构造一次而不是每次调用该函数。