C语言编程题查找一个字符串中的所有元音字母

C语言中,可以使用多种方法来查找一个字符串中的所有元音字母。可以逐个检查字符是否为元音字母、使用位运算来判断元音字母和使用数组作为查找表等方法。

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;
}

推荐阅读
cjavapy编程之路首页