[英]How do I calculate count times for every char array with struct?
struct Page{
char data[50];
int count = 0; // ?
};
Page page[50];
我不知道如何保存每个 char 数组的计数。
例如:
input: a c b
page[i].data[0] = a; // a_count = 1
page[i].data[1] = c; // c_count = 1
page[i].data[2] = b; // b_count = 1
我的想法是
paga[i].data[0].count++;
但是,我不知道如何用 struct 来实现。
您需要一个数组来解决此问题,而不是单个 integer count
。 因此,您可以通过以下方式定义Page
:
typedef struct Page
{
char data[50];
int countChar[TOTAL_CHARS];
} Page;
现在,我们不能像在 function 中那样简单地在结构中初始化数组。 所以我们必须手动初始化countChar[]
为0
。 但是,有一个技巧可以让您摆脱这个令人厌烦的过程。 诀窍是使用这样的宏:
#define NEW_PAGE { "", {0} }
并以下列方式使用它:
Page page[50] = NEW_PAGE;
现在,您所要做的就是将字符 map 到countChar[]
的索引并将其值增加 1。这可以通过以下方式完成:
page[0].countChar[ch - 'a']++;
这里, ch
是输入中的字符。 考虑到所有输入都是小写字母,用'a'
减去ch
将产生表示字符ch
频率的所需索引。 如果ch
的可能值都是 ASCII 字符,我们只需将'a'
替换为'\0'
并相应地更改countChar[]
的大小。
这是一个测试这个想法的代码:
#include<stdio.h>
#define NEW_PAGE { "", {0} }
#define TOTAL_CHARS 26
typedef struct Page
{
char data[50];
int countChar[TOTAL_CHARS];
} Page;
int main()
{
Page page[50] = NEW_PAGE;
char input[] = "hello world";
char ch;
int i = 0;
int frequency;
while(input[i] != '\0')
{
ch = input[i];
page[0].data[i] = ch;
page[0].countChar[ch - 'a']++;
i++;
}
for(i=0; i<TOTAL_CHARS; i++)
{
frequency = page[0].countChar[i];
if(frequency != 0)
printf("%c is present %d times\n", ('a'+i), frequency);
}
return 0;
}
您可以拥有一个长度为 26 的整数数组,而不是单个int
。这将保存数组中每个小写字母的计数。
小写字母的 integer 值范围为97 - 122 。 要将每个字母对应到 26 长度数组中的索引,您需要从每个char
的 integer 值中减去 97,以便每个 char 可以对应 0 - 25 的索引。
所以你的结构应该是这样的:
struct Page{
char data[50];
int count[26];
};
如果您有一个名为letter
的char
,那么您将找到count
数组的正确索引并递增它的方式是:
int index = (int)letter - 97;
count[index]++;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.