这个 C 代码只是打印到"a"之后,这里的解决方案是什么



这段代码是一个单词计数程序,但它只对字母"a"首先做一个打印b[27]的字符数组,然后使b[27]中的每个字符都是这个符号' "然后加上所有的加上所有组成a到z的字符但是当我运行的时候如果(b[i] + j == c[f]){它不检查所有的a到z,它只检查'a'字符如何修复


main() {
char b[27];
char c[10];
int counter = 0;
for (int i = 0; i < 1; ++i) {
b[i] = '`'; 
for (int j = 1; j < 27; ++j) {
b[i] + j;
if (b[i] + j > 'z' || b[i] + j < '`') {
break;
} else {
printf("%cn", b[i] + j);
for (int f = 0; f < 10; ++f) {
while ((c[f] = getchar()) != EOF) {
if (b[i] + j == c[f]) {
++counter;
printf("%c = %in", b[i]+j, counter);
}
}
}
}
}
}
}

看起来好像你在试图计算每个字母字符在输入流中出现的次数。

看起来您尝试从'`'开始,因为它在'a'之前出现,作为构建包含字母表的数组的一种方式。

这个for循环似乎试图读取最多十个字符,

for (int f = 0; f < 10; ++f) {
while ((c[f] = getchar()) != EOF) {

但是while循环试图读取整个输入流。

注意,如果char(c[f]的类型)在您的系统上是unsigned的,则不能正确地测试EOF的负值。在处理getchar的返回值时使用int

有不必要的嵌套循环。使用一个循环读取输入。使用单独的循环打印输出。

对于ASCII,'a' - 'a'0,'b' - 'a'1,以此类推,直到'z' - 'a'25。使用这些值对数组进行索引,该数组保留每个字母字符的单独计数。翻转操作,从索引中检索一个字符(例如,'a' + 5'f')。

一个例子。这里我们忽略非字母字符,并且不区分大小写。

#include <ctype.h>
#include <stdio.h>
#define ALPHALEN 26
int main(void) {
unsigned counts[ALPHALEN] = { 0 };
int c;
while (EOF != (c = getchar()))
if (isalpha(c))
++counts[tolower(c) - 'a'];
for (int i = 0; i < ALPHALEN; i++)
printf("%c = %un", 'a' + i, counts[i]);
}

或者,使用fgets读取输入行。

#include <ctype.h>
#include <stdio.h>
#define ALPHALEN 26
void alphacount(const char *str) {
unsigned counts[ALPHALEN] = { 0 };
while (*str) {
unsigned char c = (unsigned char) *str++;
if (isalpha(c))
++counts[tolower(c) - 'a'];
}
for (int i = 0; i < ALPHALEN; i++)
printf("%c = %un", 'a' + i, counts[i]);
}
int main(void) {
char buffer[512];
while (1) {
printf(">> ");
if (!fgets(buffer, sizeof buffer, stdin))
break;
alphacount(buffer);
}
}

相关内容

  • 没有找到相关文章

最新更新