簡體   English   中英

如何使用 struct 計算每個 char 數組的計數時間?

[英]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];
};

如果您有一個名為letterchar ,那么您將找到count數組的正確索引並遞增它的方式是:

int index = (int)letter - 97;
count[index]++;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM