SHARE
TWEET

Untitled

a guest May 19th, 2017 47 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. using namespace std;
  3. char ascii(char *niz)
  4. {
  5.    try  // provjeri dal je niz ustvari NULL pokazivac, ako je baci iznimku
  6.    {
  7.       if(niz == NULL) throw 1;
  8.    }
  9.    catch (int e)
  10.    {
  11.       cout<<"errr, prazan string"<<endl;
  12.       return 0;
  13.    }
  14.    unsigned int x[128] = { 0 };
  15.    int i = 0;
  16.    try
  17.    {
  18.       while (*niz!=0) // idemo kroz niz, prekidamo ako je null byte (kraj stringa)
  19.       {
  20.          try
  21.          {
  22.             if((int) *niz < 0)  // ako je ascii code za trenutni znak negativan -> nije u ascii tablici...
  23.                throw 3;
  24.             x[(int) *niz]++; // povecavamo broj pojavljivanja ascii znaka
  25.             niz++; // pomicemo se na sljedecu mem lokaciju
  26.             i++; // brojac za velicinu niza
  27.          }
  28.          catch (int e)
  29.          {
  30.             cout<<"err, nije ascii..."<<endl;
  31.             return 0;
  32.          }
  33.       }
  34.       if(i > 500)
  35.          throw 2;
  36.    }
  37.    catch (int e)
  38.    {
  39.       cout<<"errr, preveliko"<<endl;
  40.       return 0;
  41.    }
  42.    unsigned short max, skoro_max, i_max, i_skoro;
  43.    max = skoro_max = i_max = i_skoro = 0;
  44.    for(i = 127;i >= 0;i--) // pronalazimo znak koji se najcesce pojavljuje
  45.    {
  46.       if(x[i] > max)
  47.       {
  48.          max = x[i]; // broj ponavljanja najcesceg znaka
  49.          i_max = i; // ascii code znaka koji se najcesce pojavljuje
  50.       }
  51.    }
  52.    for(i = 127;i >= 0;i--)
  53.    {
  54.       if(x[i] > skoro_max && x[i] < max)
  55.       {
  56.          skoro_max = x[i]; // broj ponavljanja 2. najcesceg znaka
  57.          i_skoro = i; // ascii code znaka koji se 2. najcesce pojavljuje
  58.       }
  59.    }
  60.    if(skoro_max == 0)  
  61.    // ako se svi znakovi jednako cesto ponavljaju (samo je jedan ascii znak u stringu) vrati njegovu vrijednost
  62.    // inace vrati znak koji se 2. najcesce ponavlja...
  63.       return i_max;
  64.    else
  65.       return i_skoro;
  66. }
  67. int main(int argc,char *argv[])
  68. {
  69.    cout<<ascii(argv[1])<<endl;
  70. }
RAW Paste Data
Top