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

时间:2010-11-08 05:52:00

标签: c

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

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

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

4 个答案:

答案 0 :(得分:5)

所以你基本上需要读完整个文件char-by-char。假设你知道文件阅读是如何工作的,你需要做一些事情(道歉,自从我做了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;
}

你可能没有所有演员......

答案 1 :(得分:2)

提示:

char c[26] = { 0 }; // init
// read each input chars
    ++c[input-'a'];

答案 2 :(得分:1)

我会有一个数组(大小等于char域)并在适当的位置递增计数。

 count[ch]++;

答案 3 :(得分:0)

以防万一你关注速度:

unsigned int chars [255],* p = text;

而(* p)的    字符[* P] ++;

for(int i = 0; i&lt; 255; i ++)    if(i&gt;('A' - 1)&amp;&amp; i&lt;('Z'+ 1))       printf(“%c)%u / n”,i,chars [i];

对不起“/ n”,但我的mac pro在键盘上没有正确的字符......