📌  相关文章
📜  C程序,找出字符串中字符出现的频率

📅  最后修改于: 2021-10-27 07:42:04             🧑  作者: Mango

给定一个包含小写英文字符的字符串S ,任务是找出字符串中所有字符出现的频率。

例子:

处理方法:按照以下步骤解决问题:

  1. 初始化数组freq[]以存储给定字符串中每个字母表的频率。第0索引存储字符’ a’ 出现的频率,第 1 个索引存储字符’b’ 出现的频率,依此类推。
  2. 迭代指定字符串S和递增1遇到的每个字符的频率,通过进行频率[S [I] – “A”] + = 1。如果S[i] = ‘a’ ,则S[i] – ‘a’等于 0,因此数组中 ‘a’ 的频率增加。=
  3. 字符串的完整遍历后,通过遍历阵列FREQ打印字符串中的所有字符的频率[]。

下面是上述方法的实现:

C
// C program for the above approach
#include 
#include 
  
// Function to print the frequencies
// of each character of the string
void printFrequency(int freq[])
{
    for (int i = 0; i < 26; i++) {
  
        // If frequency of the
        // alphabet is non-zero
        if (freq[i] != 0) {
  
            // Print the character and
            // its respective frequency
            printf("%c - %d\n",
                   i + 'a', freq[i]);
        }
    }
}
  
// Function to calculate the frequencies
// of each character of the string
void findFrequncy(char S[])
{
    int i = 0;
  
    // Stores the frequencies
    // of each character
    int freq[26] = { 0 };
  
    // Traverse over the string
    while (S[i] != '\0') {
  
        // Increment the count of
        // each character by 1
        freq[S[i] - 'a']++;
  
        // Increment the index
        i++;
    }
  
    // Function call to print
    // the frequencies
    printFrequency(freq);
}
  
// Driver Code
int main()
{
    char S[100] = "geeksforgeeks";
    findFrequncy(S);
}


输出:
e - 4
f - 1
g - 2
k - 2
o - 1
r - 1
s - 2

时间复杂度: O(N)
辅助空间: O(26)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程