[英]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 進行單元測試的版本。 永遠不要在沒有某種單元測試電池的情況下編寫代碼。 它可能看起來很麻煩,但它有助於調試您的代碼。
腳注:我對您的代碼做了最小的更改。 有一些很好的建議的評論是你不應該將數組大小硬編碼為 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(){
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.