Ile cyfr jest w łańcuchu

0

Witam, mam za zadanie stworzyć program, który po wpisaniu łańcucha złożonego z cyfr wypisze ile jest w nim zer, jedynek, dójek i tak aż do 9-tki. Zrobiłem to bez pętli tak:

cout<<"Wprowadz lancuch"<<endl;
     string h;
     cin>>h;
     int suma=0;
     int x;
     int y=0;
     int b=0;
     int c=0;
     int d=0;
     int e=0;
     int f=0;
     int g=0;
     int z=0;
     int i=0;
     int j=0;
     
     for(x=0; x<=h.length(); x++)
     {
             if(h[x]=='0')
             {
                          y=y+1;}
             else if(h[x]=='1')
             {
                          b=b+1;}
             else if(h[x]=='2')
             {
                          c=c+1;}
             else if(h[x]=='3')
             {
                          d=d+1;}
             else if(h[x]=='4')
             {
                          e=e+1;}
             else if(h[x]=='5')
             {
                          f=f+1;}
             else if(h[x]=='6')
             {
                          g=g+1;}
             else if(h[x]=='7')
             {
                          z=z+1;}
             else if(h[x]=='8')
             {
                          i=i+1;}
             else if(h[x]=='9')
             {
                          j=j+1;}}
                          cout<<"Suma cyfr 0 wynosi : "<<y<<endl;
                          cout<<"Suma cyfr 1 wynosi : "<<b<<endl;
                          cout<<"Suma cyfr 2 wynosi : "<<c<<endl;
                          cout<<"Suma cyfr 3 wynosi : "<<d<<endl;
                          cout<<"Suma cyfr 4 wynosi : "<<e<<endl;
                          cout<<"Suma cyfr 5 wynosi : "<<f<<endl;
                          cout<<"Suma cyfr 6 wynosi : "<<g<<endl;
                          cout<<"Suma cyfr 7 wynosi : "<<z<<endl;
                          cout<<"Suma cyfr 8 wynosi : "<<i<<endl;
                          cout<<"Suma cyfr 9 wynosi : "<<j<<endl;
 } 

Jednakże chciałbym to wykonać przy pomocy pętli for i tablicy lecz nie wiem jak. Pomożecie?

5

Zrób sobie kontener trzymaj​ący wartości dla każdej z cyfr.
np:

map<char, int> ilosci;
for(char c : h) if(isdigit(c)) ilosci[c]++;

for(auto const& p : ilosci){
	cout << "Cyfra '" << p.first << "': " << p.second << " wystapien" << endl;
}

Jako, że jesteś mniej zaawansowany to pewnie będziesz chciał użyć tablicy (najlepiej użyj do tego std::array), a jako indeksu możesz użyć wartości cyfry ('9' - '0' to wartość 9, skorzystaj z tego)

0

Szczerze mówiąc jestem bardzo w podstawie i nadal nie mam pojęcia jak się do tego zabrać.

1

Musisz mieć kontener, w którym zapamiętasz ilości wystąpień interesujących Cię znaków. Ponieważ interesują Cię cyfry 0-9, możesz ich jednocześnie użyć jako indeksów tablicy (tablice są indeksowane od zera, więc 0-9 to będzie ich pierwszych dziesięć elementów).

Wobec tego możesz zdefiniować sobie tablicę:

array<int,10> tab{};

Następnie powinieneś skorzystać ze wspomnianej wyżej zależności, t.j. wartość w ASCII, bądź dowolnym innym kodowaniu używanym przez Twoje środowisko, cyfry - '0' będzie równa wartości liczbowej tej liczby (czyli '9'-'0'==9). Dzięki temu w trywialny sposób wiesz, który indeks chcesz inkrementować.

W tym momencie całe zadanie zostało wykonane, wystarczy wyświetlić wyniki.

6

Wystarczy:

int tb[10]={0},ch;
while((ch=cin.get())!='\n') if(isdigit(ch)) ++tb[ch-'0'];
for(int i=0;i<10;++i) if(tb[i]) cout<<"Ilosc cyfr "<<i<<" wynosi : "<<tb[i]<<endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1