在C++中查找字符是否为元音还是辅音

在C++中查找字符是否为元音还是辅音

给定一个字符,请检查它是元音还是辅音。元音是’a’,’e’,’i’,’o’和’u’。所有其他字符(’b’,’c’,’d’,’f’ …..)都是辅音。

在C++中查找字符是否为元音还是辅音

例子:

**输入** : x = 'c'
**输出** : 辅音

**输入** : x = 'u'
**输出** : 元音

{IDE}

我们检查给定的字符是否与5个元音中的任何一个匹配。如果是,则打印“元音”,否则打印“辅音”。

// C++程序检查给定的字符是否为元音或辅音。
#include <iostream>
using namespace std;
 
//检查字符是元音还是辅音的函数
void vowelOrConsonant(char x)
{
    if (x == 'a' || x == 'e' ||
        x == 'i' || x == 'o' ||
        x == 'u')
        cout << "元音" << endl;
    else
        cout << "辅音" << endl
}
 
//主函数
int main()
{
    vowelOrConsonant('c');
    vowelOrConsonant('e');
    return 0;
}  

输出:

辅音
元音

时间复杂度: O(1)

辅助空间: O(1)

如何处理大写字母?

// C++程序检查给定的字符是否为元音或辅音。
#include <iostream>
using namespace std;
 
//检查字符是元音还是辅音的函数
void vowelOrConsonant(char x)
{
    if (x == 'a' || x == 'e' ||
        x == 'i' || x == 'o' ||
        x == 'u' || x == 'A' ||
        x == 'E' || x == 'I' ||
        x == 'O' || x == 'U')
        cout << "元音" << endl;
    else
        cout << "辅音" << endl;
}
 
//主函数
int main()
{
    vowelOrConsonant('c');
    vowelOrConsonant('E');
    return 0;
}  

输出:

辅音
元音

时间复杂度: O(1)

辅助空间: O(1)

使用switch case

// C++程序实现上述方法
#include <iostream>
using namespace std;
 
int isVowel(char ch)
{
    int check = 0;
    switch (ch)
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    case 'A':
    case 'E':
    case 'I':
    case 'O':
    case 'U':
        check = 1;
    }
    return check;
}
 
//主函数
int main()
{
    // 1表示元音
cout << "a is " << isVowel('a') << endl;

// 0表示辅音
cout << "x is " << isVowel('x') << endl;

return 0;
}  

输出:

a is 1
x is 0

时间复杂度: O(1)

辅助空间: O(1)

另一种方法是在只包含元音的字符串中使用find()函数查找字符。

// C++实现
// 上述方法
#include<iostream>
#include<string>
using namespace std;

int isVowel(char ch)
{
    // 母音列表
    string str = "aeiouAEIOU";
    return (str.find(ch) != string::npos);
}

// 驱动程序
int main()
{
    cout<<"a is"<<
    isVowel('a') << endl;
    cout << "x is " <<
    isVowel('x') << endl;

    return 0;
}  

输出

a is 1
x is 0

时间复杂度: O(1)//因为在 isVowel 函数中,有一个固定长度的字符串。如果我们的字符串长度为 n,则可以说时间复杂度在这里是 O(n),其中 n是常数。

辅助空间: O(1)
使用位移最有效的检查元音字母的方法:

在ASCII码中,每个元音字母(大小写)的值都如下所示。

元音字符 十进制 十六进制 二进制
a 97 0x61 01100001
e 101 0x65 01100101
i 105 0x69 01101001
o 111 0x6F 01101111
u 117 0x75 01110101
A 65 0x41 01000001
E 69 0x45 01000101
I 73 0x49 01001001
O 79 0x4F 01001111
U 85 0x55 01010101

因为小写和大写的元音字母都有相同的5位最低位,所以我们需要一个数字0x208222,在右移1、5、19、15位后其最低位为1,否则为0 。 数字取决于字符编码。

十进制 十六进制 二进制
31 0x1F 00011111
2130466 0x208222 1000001000001000100010
// C++程序以实现
// 上述方法
#include<iostream>
using namespace std;

int isVowel(char ch)
{
    // 与 (2130466 >>
    // (ch & 31)) & 1; 相同
    return (0x208222 >>
        (ch & 0x1f)) & 1;

}

// 驱动程序
int main()
{
    cout<<"a is"<<
    isVowel('a') << endl;
    cout << "x is " <<
    isVowel('x') << endl;

    return 0;
}  

输出

a is 1
x is 0

时间复杂度: O(1)

辅助空间: O(1)
* 在 X86 机器上可以省略 ( ch & 0x1f ) 部分,因为 SHR/SAR(即 >>)的结果会自动掩码为 0x1f。

  • 对于机器来说,位图检查比表格检查更快,但如果 ch 变量存储在寄存器中,则可能执行得更快。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例