嵌套的for循环检查2d数组中每个字符串的第一个字母是否为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] == '') {
inputArray[a][b] = '';
a++;  
b = 0;    
} 
else {
inputArray[a][b] = inputString[i];
b++;
}
}
for (int i = 0; i < 99; i++) {
if (inputArray[i][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] = '';
if (inputArray[i][j] == '') {
inputArray[i][j] = 'm';
inputArray[i][j + 1] = 'o';
inputArray[i][j + 2] = 'o';
inputArray[i][j + 3] = '.';
inputArray[i][j + 4] = '';
i++;
j = 0;
}
}
else if (inputArray[i][j] == ',') {
inputArray[i][j] = '';
if (inputArray[i][j] == '') {
inputArray[i][j] = 'm';
inputArray[i][j + 1] = 'o';
inputArray[i][j + 2] = 'o';
inputArray[i][j + 3] = ',';
inputArray[i][j + 4] = '';
i++;
j = 0;
}
}
else {
if (inputArray[i][j] == '') {
inputArray[i][j] = 'm';
inputArray[i][j + 1] = 'o';
inputArray[i][j + 2] = 'o';
inputArray[i][j + 3] = '';
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] != '') {
printf("a");
i++;
j = 0;
}
}
}
for (int i = 0; i < 99; i++) {
printf("%s ", inputArray[i]);
if (inputArray[i][0] == '') {
break;
}
}
return 0;
} 

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

yo
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayo

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

如果你们能帮我,我将非常感激

编辑:我改变了代码一点,使它更可读(感谢Benjamin Maurer!),但本质上我想在第一个if语句中做的是添加"moo">

以元音开头的单词。

您的代码开始正常,但为什么在第二个循环中从数组表记法切换到指针解引用的绝对疯狂?我甚至不打算去理解这些代码,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.h。Islapha检查参数是否为字母拉丁字符(字母)。

相关内容