1、for循环遍历字符串
逐个检查字符是否为元音字母,代码如下,
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void findVowels(const char *str) {
int len = strlen(str);
printf("Vowels in the string: ");
for (int i = 0; i < len; ++i) {
char ch = tolower(str[i]);
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
printf("%c ", str[i]);
}
}
printf("\n");
}
int main() {
const char *str = "Hello, World!";
findVowels(str);
return 0;
}
2、使用switch语句判断
通过for
循环实现遍历,然后通过switch
语句进行判断,代码如下,
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void findVowels(const char *str) {
printf("Vowels in the string: ");
while (*str) {
switch (tolower(*str)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("%c ", *str);
break;
}
str++;
}
printf("\n");
}
int main() {
char str[100];
printf("输入一个字符串: ");
fgets(str, sizeof(str), stdin);
findVowels(str);
return 0;
}
3、使用 strchr 函数和元音字母数组
通过循环遍历字符串,然后通过使用 strchr
函数和元音字母数组,然后进行判断,代码如下,
#include <stdio.h>
#include <string.h>
void findVowels(const char *str) {
const char vowels[] = "aeiouAEIOU";
printf("Vowels in the string: ");
for (const char *p = str; *p != '\0'; ++p) {
if (strchr(vowels, *p)) {
printf("%c ", *p);
}
}
printf("\n");
}
int main() {
char str[100];
printf("输入一个字符串: ");
fgets(str, sizeof(str), stdin);
findVowels(str);
return 0;
}
4、使用位运算来检查元音字母
使用循环遍历整个字符串,然后在通过位运算的方式进行对字符串中每个字母的判断,代码如下,
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void findVowels(const char *str) {
int vowelMask = 0;
const char *vowels = "aeiouAEIOU";
// Set bits for each vowel in vowelMask
for (int i = 0; vowels[i] != '\0'; ++i) {
vowelMask |= (1 << (tolower(vowels[i]) - 'a'));
}
printf("Vowels in the string: ");
while (*str) {
if (isalpha(*str) && (vowelMask & (1 << (tolower(*str) - 'a')))) {
printf("%c ", *str);
}
str++;
}
printf("\n");
}
int main() {
char str[100];
printf("输入一个字符串: ");
fgets(str, sizeof(str), stdin);
findVowels(str);
return 0;
}
5、使用正则表达式
通过写一个判断元音字每的正则表达式,用正则表式对字符串进行匹配,从而判断出来字符串中的所有元音字母。
#include <stdio.h>
#include <string.h>
#include <pcre.h>
void findVowels(const char *str) {
const char *pattern = "[aeiouAEIOU]";
pcre *re;
const char *error;
int erroffset;
int ovector[30];
int rc;
re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
if (re == NULL) {
printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
return;
}
printf("Vowels in the string: ");
rc = pcre_exec(re, NULL, str, strlen(str), 0, 0, ovector, 30);
while (rc >= 0) {
printf("%c ", str[ovector[0]]);
rc = pcre_exec(re, NULL, str, strlen(str), ovector[1], 0, ovector, 30);
}
printf("\n");
pcre_free(re);
}
int main() {
char str[100];
printf("Enter a string: ");
fgets(str, sizeof(str), stdin);
findVowels(str);
return 0;
}