[英]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.