首页 > 解决方案 > 嵌套for循环检查二维数组中每个字符串的第一个字母是否是c中的辅音

问题描述

我是编程的初学者,我遇到了问题。我认为这是非常基本的,但我到处寻找并找不到解决方案(可能是因为我自己缺乏理解)。这是我的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
    char inputString[999];
    char inputArray[99][99]; 
    int a = 0;
    int b = 0;
    fgets(inputString, sizeof inputString, stdin);
    for(int i = 0; i <= (strlen(inputString)); i++) {
        if(inputString[i] == ' ' || inputString[i] == '\0') {
            inputArray[a][b] = '\0';
            a++;  
            b = 0;    
        } 
        else {
            inputArray[a][b] = inputString[i];
            b++;
        }
    }
    for (int i = 0; i < 99; i++) {
        if (inputArray[i][0] == '\0') {
            break;
        }
        for (int j = 0; j < 99; j++) {
            iif (inputArray[i][0] == 'a' || inputArray[i][0] == 'e' || inputArray[i][0] == 'i' || inputArray[i][0] == 'o' || inputArray[i][0] == 'u' ||
                inputArray[i][0] == 'A' || inputArray[i][0] == 'E' || inputArray[i][0] == 'I' || inputArray[i][0] == 'O' || inputArray[i][0] == 'U') {
                if (inputArray[i][j] == '.') {
                    inputArray[i][j] = '\0';
                    if (inputArray[i][j] == '\0') {
                        inputArray[i][j] = 'm';
                        inputArray[i][j + 1] = 'o';
                        inputArray[i][j + 2] = 'o';
                        inputArray[i][j + 3] = '.';
                        inputArray[i][j + 4] = '\0';
                        i++;
                        j = 0;
                    }
                }
                else if (inputArray[i][j] == ',') {
                    inputArray[i][j] = '\0';
                    if (inputArray[i][j] == '\0') {
                        inputArray[i][j] = 'm';
                        inputArray[i][j + 1] = 'o';
                        inputArray[i][j + 2] = 'o';
                        inputArray[i][j + 3] = ',';
                        inputArray[i][j + 4] = '\0';
                        i++;
                        j = 0;
                    }
                }
                else {
                    if (inputArray[i][j] == '\0') {
                        inputArray[i][j] = 'm';
                        inputArray[i][j + 1] = 'o';
                        inputArray[i][j + 2] = 'o';
                        inputArray[i][j + 3] = '\0';
                        i++;
                        j = 0;
                    }
                }
            } 
            else if (inputArray[i][0] != 'a' || inputArray[i][0] != 'e' || inputArray[i][0] != 'i' || inputArray[i][0] != 'o' || inputArray[i][0] != 'u' ||
                    inputArray[i][0] != 'A' || inputArray[i][0] != 'E' || inputArray[i][0] != 'I' || inputArray[i][0] != 'O' || inputArray[i][0] != 'U' || inputArray[i][0] != '\0') {
                printf("a");
                i++;
                j = 0;
            }
        }
    }
    for (int i = 0; i < 99; i++) {
        printf("%s ", inputArray[i]);
        if (inputArray[i][0] == '\0') {
            break;
        }
    }
    return 0;
} 

本质上,我正在尝试输入一个字符串,使用二维数组将它们分成单词,然后检查该数组中每个字符串的第一个字母是辅音还是元音。我正在使用 printf("a"); 测试我的代码是否有效,但是当我运行程序并输入“yo”之类的内容时,输出如下:

yo
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayo

字母“a”被打印了 99 次,这是运行内部 for 循环的次数,所以我猜这与数组中每个字符串的第一个元素也不是元音,也许它是一个空字符,所以我尝试添加 if (inputArray[i][0] == '\0') { (就像在代码中一样),但它仍然不起作用。

如果你们能帮助我,我将不胜感激

编辑:我稍微更改了代码以使其更具可读性(感谢 Benjamin Maurer!),但基本上我在第一个 if 语句中尝试做的是将“moo”添加到一个单词的末尾,如果它以 a 开头元音。

标签: arrayscstringfor-loop

解决方案


您的代码开始正常,但是为什么在第二个循环中使用指针取消引用从数组表示法切换到这种绝对疯狂?我什至不会尝试理解该代码,bc。这是不可读的。

根据您的描述,每个inputArray[i]都是一个字符串。所以检查是否inputArray[i][0]是辅音/元音就足够了,不是吗?

#include <ctype.h>
#include <stdio.h>

// ...Read input...

for (int i = 0; i < 99; ++i) {
    if (isalpha(inputArray[i][0])) {
        char c = toupper(inputArray[i][0]);
        switch (c) {
            // Intentional fallthroughs
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                puts("is vowel!");
                break;

            default:
                puts("is consonant");
        }
    }
}

两者isalphatoupper来自ctype.hislapha检查参数是否是拉丁字母字符(一个字母)。


推荐阅读