解题思路:
首先定义一个字符数组用来存放 '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 人评分
int index = (s[i] > 'a') + (s[i] > 'e') + (s[i] > 'i') + (s[i] > 'o'); //利用逻辑运算获得a的下标 a[index] = 1; //令a[index]=1,表示存在对应的元音字母 这个是什么意思
CodeRookie 2021-02-07 09:04:41 |
这句前面的if语句只判断了是否为元音字母,但是不知道是哪个字母,所以我用逻辑运算来计算字母对应数组的下标,你试着看下我代码前写的,应该能明白
詹鸿培 2021-02-21 10:48:31 |
我是问a[index] = 1
雨 2023-12-11 14:18:55 |
index是为了求下标
C语言程序设计教程(第三版)课后习题6.11 (C++代码)(有个库函数叫sqrt)浏览:981 |
C语言训练-舍罕王的失算 (C语言代码)浏览:1054 |
C语言程序设计教程(第三版)课后习题8.3 (Java代码)浏览:1402 |
数列排序 (C语言代码)浏览:858 |
不会做的浏览:954 |
用筛法求之N内的素数。 (C++代码)浏览:754 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:490 |
1157题解浏览:769 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:541 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:585 |