(C) 如何使用动态内存进行字符输入?以及如何以某种方式组织输入的值



这些是方向:

从标准输入中读取字符,直到读取 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

相关内容

  • 没有找到相关文章