c - 如何创建一个函数来计算每个字母的出现次数?

标签 c

在 C 中,我需要创建一个函数,用于输入,计算并显示每个字母出现的次数。

对于“Lorem ipsum dolor sit amet”的输入,该函数应返回类似于以下内容的内容:

a: 0
b: 0
c: 0
d: 1
e: 2
f: 0
...

最佳答案

因此,您基本上需要逐个字符地通读整个文件。假设你知道文件读取是如何工作的,你将需要做一些类似的事情(抱歉,我已经有一段时间没做 C 了):

if (isalpha(ch)) {
  count[ch-'a']++;
}
/* rest of code where char pointer is moved on etc. */

您需要为此导入 ctype 库:

#include <ctype.h>

** 忘了提,假设你会推断出以下内容:ch 是指向当前读入字符的指针,而 count[] 是一个 int[],初始化为全零,大小为 (26 * 2) = 52 以适应大写和小写。如果大写和小写应该被同等对待,您可以使用 ctype 库中也包含的 tolower(int c) 函数。在这种情况下,您只需要一个 26 大小的数组。

if (isalpha(ch)) {
  count[tolower(ch)-'a']++;
}

然后 count[] 应该包含每个字符的计数。

/* ***** */

如果您只想使用 stdio.h 库执行此操作,您可以实现 ctype.h 库中使用的两个函数。

isalpha(int c) 函数的简单实现可能是这样的:

if (((int)c >= 'a' && (int)c <= 'z') || ((int)c >= 'A' && (int)c <= 'Z') {
  return TRUE;
} else {
  return FALSE;
}

(其中 TRUE 和 FALSE 是您的返回类型和您定义的类型)。

一个真正简单的 tolower 版本可能是这样的:

if ((int)c >= 'A' && (int)c <= 'Z') {
  return (int)c - 'a';
} else {
  return (int)c;
}

你可能没有所有的 Actor ......

关于c - 如何创建一个函数来计算每个字母的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121589/

相关文章:

检查 float 是否为整数

c - 具有 union 和位域的结构的大小

c - 该代码无法正确执行。尝试找出原因

c - 使用计数变量偏移指向指针的指针

c - GList(glib-doubly-linked-list)线程安全吗?

c - 这段代码内存错误在哪里?

c - 简单的字节码转换器

c - 使用可用的堆栈保护器 SSP 搜索 GCC 版本

python - python SWIG 可以在没有库源代码的情况下绑定(bind)库吗?

c - gtk_window_set_deletable 不会从主窗口中删除关闭按钮 (X)