这些是方向:
从标准输入中读取字符,直到读取 EOF(文件结束标记)。不要提示用户输入文本 - 只需在程序启动后立即读取数据。保留输入中遇到的每个不同字符的运行计数,并保留输入字符总数(不包括 EOF)的计数。
我知道我必须以某种方式使用 malloc() 函数将值存储在数组中。我必须通过计算输入特定字符的次数来组织输入的每个字符。感谢您的帮助!
实际上,由于您是从标准输入读取的,因此最多有 256 种不同的可能性。 (你用字符阅读)。 既然是这种情况,你可以静态分配 256 个整数进行计数。 int charCount[256];
只需将每个值初始化为 0,然后在每次输入匹配项时递增。
或者,如果您必须有 malloc,那么:
// This code isn't exactly what I'd turn in for homework - just a starting
// point, and non-tested besides.
int* charCount = (int*) malloc(sizeof(int) * 256); // Allocate 256.
for (int i = 0; i < 256; i++) charCount[i] = 0; // Initialize to 0.
// Counting and character input go here, in a loop.
int inputChar;
// Read in inputChar with a call to getChar(). Then:
charCount[inputChar]++; // Increment user's input value.
// Provide your output.
free(charCount); // Release your memory.
这是一个可能的解决方案:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int count[256] = {0};
char *l, *lp;
while (scanf(" %ms", &l) != EOF) {
for (lp = l; *lp; lp++)
count[(int)*lp]++;
free(l);
}
for (int i = 0; i < 256; i++) {
if (isprint(i) && count[i])
printf("%c: %dn", i, count[i]);
}
exit(EXIT_SUCCESS);
}
编译:
c99 t.c
跑:
$ ./a.out
abc
ijk
abc
<-- Ctrl-D (Unix-like) or Ctrl-Z (Windows) for EOF
a: 2
b: 2
c: 2
i: 1
j: 1
k: 1