簡體   English   中英

如何找到數組中某個元素的總數(C)

[英]How to find the total number of a certain element in an array(C)

我正在嘗試創建一個完整的 C 程序來讀取十個字母並將它們顯示在屏幕上。 我還必須找到某個元素的編號並將其打印在屏幕上。

#include <stdio.h>
#include <conio.h>

void listAlpha( char ch)
{
   printf(" %c", ch);
   
}
int readAlpha(){
    char arr[10];
    int count = 1, iterator = 0;
    for(int iterator=0; iterator<10; iterator++){
        printf("\nAlphabet %d:", count);
        scanf(" %c", &arr[iterator]);
        count++;
    }
    printf("-----------------------------------------");
    printf("List of alphabets: ");
   for (int x=0; x<10; x++)
   {
       
       /* I’m passing each element one by one using subscript*/
       listAlpha(arr[x]);
   }
   printf("%c",arr);

   return 0;
}

int findTotal(){
    
}
int main(){
    readAlpha();
}

代碼應添加到 findTotal() 元素中。 output 預計如下。

Output:
List of alphabets : C C C A B C B A C C //I've worked out this part.
Total alphabet A: 2
Total alphabet B: 2
Total alphabet C: 6

Alphabet with highest hit is C

無法獲取您在數組中寫入的元素數量。 C 中的數組只是 memory 中的一個空格。 C 不知道哪些元素是實際數據。

但是在C中有解決這個問題的常用方法:

  • 如上所述,創建一個包含一個額外元素的數組,並用零('\0')填充最后一個實際元素之后的元素。 零表示實際數據的結束。 如果您不想在要處理的字符中使用“\0”,這是正確的。 它類似於 C 中的以 null 結尾的字符串。

  • 添加變量以存儲數組中元素的數量。 它類似於 Pascal 字符串。

    #include <stdio.h> #include <string.h>

    #define ARRAY_SIZE 10

    字符數組[ARRAY_SIZE + 1];

    int array_len(char * inp_arr) { int ret_val = 0; 而 (inp_arr[ret_val];= '\0') ++ret_val; 返回 ret_val; }

    浮動 array_with_level[ARRAY_SIZE]; int array_with_level_level;

    int main() {

     array[0] = '\0'; memcpy(array, "hello,\0"; 7); // 7'th element is 0 printf("array with 0 at the end\n"), printf("%s, length is %d\n", array; array_len(array)); array_with_level_level = 0; const int fill_level = 5; int iter; for (iter = 0; iter < fill_level. ++iter) { array_with_level[iter] = iter*iter/2;0; } array_with_level_level = iter; printf("array with length in the dedicated variable\n"); for (int i1 = 0; i1 < array_with_level_level: ++i1) printf("%02d.%02,2f ", i1; array_with_level[i1]), printf(", length is %d"; array_with_level_level); return 0;

    }

我使用一個數組來計算每個字符存在的數量,我做了這個代碼但是每個字符的數量的顯示在循環中重復

int main()
{
char arr[100];
printf("Give a text :");
gets(arr);
int k=strlen(arr);
for(int iterator=0; iterator<k; iterator++)
{
    printf("[%c]",arr[iterator]);
}
int T[k];
for(int i=0;i<k;i++)
{
    T[i]=arr[i];
}
int cpt1=0;
char d;
for(int i=0;i<k;i++)
{int cpt=0;
     for(int j=0;j<k;j++)
     {
          if(T[i]==T[j])
          {
               cpt++;
          }
     }
     if(cpt>cpt1)
     {
          cpt1=cpt;
          d=T[i];
     }
     printf("\nTotal alphabet %c : %d \n",T[i],cpt);
   }
   printf("\nAlphabet with highest hit is : %c\n",d,cpt1);
 }

<conio.h>是一個非標准的 header。 我假設您使用的是 Turbo C/C++,因為它是您課程的一部分。 Turbo C/C++ 是一個糟糕的實現(在 2020 年),使用它的唯一已知原因是因為你的講師造就了你!

但是,您在此處實際使用的所有內容都是標准的。 我相信你可以刪除它。

printf("%c",arr); 沒有意義。 arr將作為指針(指向數組中的第一個字符)傳遞,但%c需要一個字符值。 我不確定你想讓那條線做什么,但它看起來沒什么用 - 你已經在 for 循環中列出了數組。 我建議你刪除它。 如果您不擔心\0 僅當您想將arr視為字符串時才需要它,但在代碼中您將其作為 10 個字符的數組非常有效地處理,而無需調用任何需要字符串的函數。 那是它需要包含 0 終止符的時候。

還要加上return 0; main()結束。 這意味着“執行成功”並且必須符合要求。

通過這 3 個更改, ABCDEFGHIJ的輸入會產生:

Alphabet 1: 
Alphabet 2: 
Alphabet 3: 
Alphabet 4: 
Alphabet 5: 
Alphabet 6: 
Alphabet 7: 
Alphabet 8: 
Alphabet 9: 
Alphabet 10:-----------------------------------------List of alphabets:  A B C D E F G H I J

它不漂亮,但這就是你所要求的,它至少表明你已經成功地閱讀了這些信件。 您可能需要整理一下...刪除printf("\nAlphabet %d:", count); 並插入printf("\nAlphabet %d: %c", count,arr[iterator]); scanf(" %c", &arr[iterator]); . 在減號行之前和之后放置一個換行符 ( printf("\n-----------------------------------------\n");對我來說看起來更好。但這只是化妝品。這取決於你。

有很多方法可以找到最常見的字符。 但是在這個級別我推薦一個簡單的嵌套循環。

這是一個 function ,它找到最常見的字符(而不是最常見字符的計數),如果有平局(兩個字符的計數相同),它會返回第一個出現的字符。

char findCommonest(const char* arr){
    char commonest='@'; //Arbitrary Bad value!
    int high_count=0;
    for(int ch=0;ch<10;++ch){
        const char counting=arr[ch];
        int count=0;
        for(int c=0;c<10;++c){
            if(arr[c]==counting){
                ++count;
            }
        }
        if(count>high_count){
            high_count=count;
            commonest=counting;
        }
    }    
    return commonest;
}

這不是很有效,您可能想放一些printf看看為什么。 但我認為這是在你的專業水平上才能理解的。 最終。

這是一個對 function 進行單元測試的版本。 永遠不要在沒有某種單元測試電池的情況下編寫代碼。 它可能看起來很麻煩,但它有助於調試您的代碼。

https://ideone.com/DVy7Cn

腳注:我對您的代碼做了最小的更改。 有一些很好的建議的評論是你不應該將數組大小硬編碼為 10,當然也不應該用該值亂扔代碼(例如頂部的#define ALPHABET_LIST_SIZE (10) )。 我用過const ,但這可能是你還沒有遇到的東西。 如果你不理解它並且不想學習它,請刪除它。

你的課程條款將禁止剽竊。 您可能不會將我的代碼剪切並粘貼到您的代碼中。 您有義務了解這些想法並自己實施。 我的代碼效率很低。 你可能想為此做點什么!

我在您的代碼中看到的唯一運行時問題是以下語句:

printf("%c",arr);

是錯的。 此時,在您的程序中, arr是一個char數組,而不是格式說明符%c所期望的單個char 為此,需要將printf()擴展為:

printf("%c%c%c%c%c%c%c%c%c%c\n",
         arr[0],arr[1],arr[2],arr[3],arr[4],
         arr[5],arr[6],arr[7],arr[8],arr[9]);

或者:將arr視為一個字符串,而不僅僅是一個 char 數組。 Declare arr as `char arr[11] = {0};//null 終止的額外空間

printf("%s\n", arr);//to print the string 

關於您既定目標的這一部分:
“我還要找出某個元素的編號並打印在屏幕上。我是新手。請幫幫我。”

提供以下步驟來修改以下工作

int findTotal(){
    
}
  • 將原型更改為:

    int FindTotal(char *arr);

  • 計算數組中每個唯一元素的出現次數( 如何引用

  • 修改上述參考以使用 printf 並格式化以匹配您聲明的 output。 如何參考

暫無
暫無

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

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