2017-08-25 13 views
-3
#include<bits/stdc++.h> 
#define ASCII_SIZE 256 

using namespace std; 

char getMaxOccuringChar(char* str) 
{ 
    int count[ASCII_SIZE] = {0}; 

    // Construct character count array from the input 
    // string. 
    int len = strlen(str); 
    for (int i=0; i<len; i++) 
     count[str[i]]++; 
    // can someone please explain me this for loop 

    int max = -1; // Initialize max count 
    char result; // Initialize result 

    // Traversing through the string and maintaining 
    // the count of each character 
    for (int i = 0; i < len; i++) { 
     if (max < count[str[i]]) { 
      max = count[str[i]]; 
      result = str[i]; 
     } 
    } 

    return result; 
} 
+0

デバッガで実行し、文字列内の文字を1ステップずつ進めながら、 'count []'配列の値を調べます。そうしている間、この関数の* 2 *ループの無意味さを考えてみてください。これは達成しようとしているすべてのもので十分です。 – WhozCraig

+0

int len = strlen(str); - 文字列内の合計文字。文字列をループし、一意の文字セットごとにカウントするカウンタを設定します。キャラクタの各インスタンスについて、そのカウンタをインクリメントします。 –

+0

このプログラムはUBを展示しています。文字が署名されている場合はどうなりますか? –

答えて

0

//は、誰かがコードを少し簡素化

ループ

のために私にこれを説明し、いくつかの有用な出力を生成するコードの行を追加してくださいすることができます。

for (int i=0; i<len; i++) 
{ 
    // Simplify this line 
    // count[str[i]]++; 

    int index = str[i]; 
    count[index]++; 

    // Add helpful output to understand the code. 
    std::cout << "Changed the value of count[" << index << "] to " << count[index] << std::endl; 
} 

ここで何が起こっているのかを出力する必要があります。

関連する問題