CodeRookie


私信TA

用户名:Shmily124

访问量:133444

签 名:

清风前烹茶对弈,明月下把酒言欢

等  级
排  名 14
经  验 22966
参赛次数 7
文章发表 39
年  龄 0
在职情况 学生
学  校 ZUA
专  业 计科

  自我简介:

悄悄地秃头,然后惊艳所有人?

解题思路:
首先定义一个字符数组用来存放 'a', 'e', 'i', 'o', 'u' 五个元音字母,并用一个长度为5的整型数组 a 与五个元音字母对应,控制元音字母的输出

举个栗子:若 a [0] != 0,则表示输入的字符串中有 ' a ' 这个字母,所以输出 ' a ' ,否则不输出 ' a ' ,依此类推,这样就省去了排序的过程

我们要将数组 a [5] 初始化全为 0 ,然后对输入的字符串中的字符挨个判断是否为元音字母,若是就将数组中对应的数字赋值为 1 就可以了

这样的话我们不仅要知道字符是否为元音字母,还要知道是哪一个元音字母,我们可以写五个i f 语句,像这样:

if (s[i] == 'a')
    a[0] = 1;
else if (s[i] == 'e')
    a[1] = 1;
else if (s[i] == 'i')
    a[2] = 1;
else if (s[i] == 'o')
    a[3] = 1;
else if (s[i] == 'u')
    a[4] = 1;

但是这样太长了,所以我非常骚气地把代码改成了这样:

if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u')        //判断字符是否为元音字母
{
    int index = (s[i] > 'a') + (s[i] > 'e') + (s[i] > 'i') + (s[i] > 'o');          //利用逻辑运算获得a的下标
    a[index] = 1;
}

每一个逻辑运算的结果都是用 0 或 1 表示的,所以经给四次比较的结果相加就能得到我们想要的数组下标

但是我很快发现,虽然代码变短了,但对于计算机来说,事情变得更复杂了,好像是多此一举了……


参考代码:

#include <stdio.h>
 
int main()
{
    char s[101];                                //定义输入的字符串
    char vowels[6] = {'a', 'e', 'i', 'o', 'u'}; //定义元音字母数组
    int a[5] = {0};                             //定义控制输出数组,初始化全为0
    gets(s);                                    //输入字符串
    for (int i = 0; s[i] != '\0'; i++)          //循环字符串到结尾符
    {
        if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') //判断字符是否为元音字母
        {
            int index = (s[i] > 'a') + (s[i] > 'e') + (s[i] > 'i') + (s[i] > 'o');  //利用逻辑运算获得a的下标
            a[index] = 1;                                                           //令a[index]=1,表示存在对应的元音字母
        }
    }
    for (int i = 0; i < 5; i++)
    {
        if (a[i])                    //若a[i]!=0
            printf("%c", vowels[i]); //输出对应的元音字母
    }
    return 0;
}


 

0.0分

23 人评分

  评论区

如果字符串长度超过100多呢?
2022-06-13 10:24:50
为何不用循环判断呢?
2021-03-19 13:18:40
int index = (s[i] > 'a') + (s[i] > 'e') + (s[i] > 'i') + (s[i] > 'o');  //利用逻辑运算获得a的下标
            a[index] = 1;                                                           //令a[index]=1,表示存在对应的元音字母
这个是什么意思
2021-02-06 21:29:56
  • «
  • 1
  • »