簡體   English   中英

計算字母串的C程序

[英]C program for calculating alphabetical strings

任務:

創建一個函數 maxRepeatingLetter,它接收一個字符串,並作為結果返回給定字符串中重復次數最多的字母(如果有多個字母滿足給定條件,則返回英文字母表的第一個字母)。 假設字符串中至少有一個字母。

代碼:

#include <stdio.h>

char maxRepeatingLetter(const char *s)
{
int i, max = 0, maxIndex = 0;
int letter[26] = {0}; 
const char *pom = s;
while (*pom != '\0') 
{
  if ((*pom >= 'a' && *pom <= 'z'))
  {
     letter[*pom - 97]++;
  }
  if (*pom >= 'A' && *pom <= 'Z')
  {
     letter[*pom - 65]++;
  }
 pom++; 
}
 
for (i = 0; i < 26; i++)
{
   if (letter[i] > max) 
   { 
    max =letter[i]; maxIndex = I;
   }
 return maxIndex + 65;
}

int main () 
{
 printf("Most repeating letter is: %c", 
 maxRepeatingLetter("input for letter to repeat"));
 return 0;
}

我當前的任務是能夠解釋上面的代碼及其工作原理。 我需要對其進行一些小改動,例如,向代碼中添加一些內容,或者使其更簡單。 但不要失去代碼的主要功能。

有人願意用 2-3 行來解釋上面的代碼嗎? 如果可以的話,幫助我或暗示我,甚至告訴我我可以對代碼進行哪些更改。

我可以看到你必須區分小寫和大寫,你只能有字母而不是符號,例如? | ^。 ecc..:所以我會盡量給你一些建議:

  1. 嘗試縮進代碼,外眼人會更易讀。
  2. 使用變量letter是個好主意,但我不明白使用pom的意義。
  3. 如果您可以使用庫string.h中的函數strlen() ,否則自己實現它可能是一個很好的練習。
  4. letter[*pom - 97]++letter[*pom - 65]++maxIndex + 65依賴於 ASCII 表,嘗試letter[*pom - 'a']++letter[*pom - 'A']++maxIndex + 'A'
  5. for循環不起作用,您錯過了一個括號,因此if不在 for 中。

代碼解釋很簡單,首先你使用26個元素的數組letter ,因為在字母表中我們有26個字母,所以第i個元素對應字母表中的第i個字母。

您在字符串上循環一次並在第 i 個元素letter中保存第 i 個字母的出現次數。

使用if in for循環,您只是在該數組中找到最大值,一旦找到它,您將返回最大值的索引,索引是出現頻率更高的字母。

抱歉我的英語不好,如果您需要更多幫助,請告訴我。

如果您正在尋找上述代碼的解釋,這是非常簡單的。 我建議使用多個打印件來了解事情是如何發生的。 這是我的一些建議。

  1. 每次字符出現時,函數maxRepeatingLetter()都會更新計數器表letter[]
  2. 之后,代碼嘗試在計數器表letter[]中找到最大的數字。

暫無
暫無

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

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