Zliczanie znaków w tablicy char

Zliczanie znaków w tablicy char
Carlj28
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 141
0

Witam,

Nie wiem jak zliczyć ilość znaków w tablicy to której parametry były wprowadzane za pomocą

Kopiuj
cin.getline()

Mam tablice t[9] do której wpisuje np. abc, starałem się to zrobić tak:

Kopiuj
for(int i=0;i<9;i++)
	{
		if(t[i]>=97 && t[i]<=122);
		{
		l++;
		}
	}

Chciałem użyć tu kodów ASCII lecz wynikiem tego jest l=9, a powinno być 3. Tu pojawia się moje pytanie, jak powinienem poprawić moją funkcje? Lub jeżeli istnieje inny sposób na rozwiązanie mojego problemy to z chęcią go poznam :)

BL
  • Rejestracja: dni
  • Ostatnio: dni
0

A na końcu tablicy znaków ustawiasz \0 ?

Carlj28
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 141
0

Nie wiem, mam tą funkcje

Kopiuj
cin.getline(t,9)

a zaraz pod nią tą pętle do zliczania znaków. Więc co powinienem poprawić ?

BL
  • Rejestracja: dni
  • Ostatnio: dni
1

A tak ogólnie to po co zliczasz znaki? Jest do tego gotowa funkcja strlen()

Carlj28
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 141
0

Na końcu muszę wypisać ile razy dana litera wystąpi w innej tablicy np.
a:4
b:3
c:2

Zrobiłem to w pętli for, i przydała by mi się ta liczba żeby wyświetlał tylko te 3 elementy a ja mam takie coś:

a:4
b:3
c:2
:2
:2
....
i tak 9x.

Funkcja strlen() podziałała lecz gdy ją wpisze w for'a:

Kopiuj
for(int d=0;d<strlen(t1);d++)

to wypisuje mi:
a:0
b:0
c:0
a gdy zmienię na

Kopiuj
for(int d=0;d<l;d++)

to poprawnie wyświetla lecz to moje l=9, troszkę dziwne :/

BL
  • Rejestracja: dni
  • Ostatnio: dni
1

Jeżeli masz rozróżniać duże i małe litery to po prostu deklarujesz sobie tablicę 57 elementów, zerujesz ją a potem przy napotkaniu litery zwiększasz komórkę w tablicy o indeksie równym wartości litery w kodzie ASCII - 65 (żeby dla A było 0)

Potem jeśli komórka w tablicy jest różna od zera, wypisujesz sobie i tyle, czyli coś takiego:

Kopiuj
for(int i = 0; i < strlen(t); ++i)
    wartosci[t[i]-65] += 1;
for(int i = 0; i < 57; ++i)
    if(wartosci[i] != 0)
        cout << (char)i+65 << "  " << wartosci[i] << "\n";
mto9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 380
0

Jeśli chodzi Ci o to aby sprawdzić ile razy wystąpiła dana litera(od a do z) w danym napisie to najlepiej przygotowac pojemnik dla każdej litery, pojemniki zainicjalizowac wartością 0, następnie przeleciec przez napis i inkrementowac odpowiedni pojemnik

Carlj28
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 141
0

Ok już się z tym uporałem wielkie dzięki :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.