arrays - 嵌套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 开头元音。
解决方案
您的代码开始正常,但是为什么在第二个循环中使用指针取消引用从数组表示法切换到这种绝对疯狂?我什至不会尝试理解该代码,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");
}
}
}
两者isalpha
都toupper
来自ctype.h
。
islapha检查参数是否是拉丁字母字符(一个字母)。
推荐阅读
- python - 按 ID 将两个数据框与 pandas 合并
- node.js - 不断显示节点队列上的内容的最佳方式(使用瓶颈)
- ruby-on-rails - 下载包含大量动态生成的 PDF 的 ZIP 文件的最佳方法是什么?
- r - 如何从另一个栅格计算土地覆盖值?
- css - 为 SASS 中的每个规则添加前缀
- flutter - 导航器将所选收音机或文本的值传递到颤动的下一页
- java - 更改权限后“选择文件”按钮不起作用
- c++ - 我可以使用 decltype() 或其他方法通过指针获取真实类型吗?
- javascript - 在已经拆分的字符串上使用 Javascript 中的拆分函数
- ios - 在 Swift 中对二维数组进行排序