[英]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..:所以我會盡量給你一些建議:
letter
是個好主意,但我不明白使用pom
的意義。string.h
中的函數strlen()
,否則自己實現它可能是一個很好的練習。letter[*pom - 97]++
, letter[*pom - 65]++
和maxIndex + 65
依賴於 ASCII 表,嘗試letter[*pom - 'a']++
, letter[*pom - 'A']++
和maxIndex + 'A'
。for
循環不起作用,您錯過了一個括號,因此if
不在 for 中。 代碼解釋很簡單,首先你使用26個元素的數組letter
,因為在字母表中我們有26個字母,所以第i個元素對應字母表中的第i個字母。
您在字符串上循環一次並在第 i 個元素letter
中保存第 i 個字母的出現次數。
使用if
in for
循環,您只是在該數組中找到最大值,一旦找到它,您將返回最大值的索引,索引是出現頻率更高的字母。
抱歉我的英語不好,如果您需要更多幫助,請告訴我。
如果您正在尋找上述代碼的解釋,這是非常簡單的。 我建議使用多個打印件來了解事情是如何發生的。 這是我的一些建議。
maxRepeatingLetter()
都會更新計數器表letter[]
。letter[]
中找到最大的數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.