Witam, mam problem z takim o to zadaniem:
Napisz program, który liczy wszystkie wystąpienia poszczególnych liter we wczytanym zdaniu i wyświetla
ich statystykę. Na końcu znajdź i wyświetl literę/litery, które najczęściej występowały wraz z ich liczbą wystąpień.
Wprowadz zdanie: To jest to.
T ----- 1
o ----- 2
------ 2
j ----- 1
e ----- 1
s ----- 1
t ----- 2
----- 2
t ----- 2
o ----- 2
. ----- 1
Najczesciej wystąpily: o, ,t po 2 razy.
Aktualnie przerabiam tablice, wskazniki i dynamiczna alokacje .. i z tym zadaniem mam najwiekszy klopot ...
Bardzo dziekuje za wszelka pomoc, pozdrawiam
c++ / zliczanie liter w zdaniu i wyswietlanie ich statystyki
-
- Użytkownik
- Posty: 7
- Rejestracja: 13 maja 2007, o 20:16
- Płeć: Mężczyzna
- Lokalizacja: Rzeszow
- Podziękował: 2 razy
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
c++ / zliczanie liter w zdaniu i wyswietlanie ich statystyki
Weż stwórz sobie tablicę intów i wyzeruj ją. Pobieraj literka po literce(np.getch) albo całego stringa (i stamtąd odczytywać wartości) i zwiększaj ta komórkę tablicy o indeksie odpowiadającym wartości ASCII tego znaku :
- -'A' jeśli (znak>64)&&(znak96)&&(znak<123)
^Ten warunek dlatego, że w kodzie ascii są inne znaki pomiedzy dużymi i małymi literami.
Zwiększenie komórki tablicy to oczywiście: alfabet[znak-'A']++;(lub alfabet[znak-'a']++;w zależności od spełnienia warunku).
Masz w tablicy cały alfabet, a poszczególne komórki mają wartość taką jak ilość wystąpień odpowiadającej jej literce.
Teraz sobie szukasz maksimum(maksima) w tej tablicy(chyba potrafisz?) i wypisujesz wartość komórek z maksimum oraz chary o kodzie ascii równym indeksowi plus 65 dla pierwszych 25 komórek lub plus 97 dla pozostałych. To by było na tyle. Pozdrawiam.
- -'A' jeśli (znak>64)&&(znak96)&&(znak<123)
^Ten warunek dlatego, że w kodzie ascii są inne znaki pomiedzy dużymi i małymi literami.
Zwiększenie komórki tablicy to oczywiście: alfabet[znak-'A']++;(lub alfabet[znak-'a']++;w zależności od spełnienia warunku).
Masz w tablicy cały alfabet, a poszczególne komórki mają wartość taką jak ilość wystąpień odpowiadającej jej literce.
Teraz sobie szukasz maksimum(maksima) w tej tablicy(chyba potrafisz?) i wypisujesz wartość komórek z maksimum oraz chary o kodzie ascii równym indeksowi plus 65 dla pierwszych 25 komórek lub plus 97 dla pozostałych. To by było na tyle. Pozdrawiam.
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
c++ / zliczanie liter w zdaniu i wyswietlanie ich statystyki
Czasem wystarczy przejrzeć tematy, które już były na forum, bo taki program już 2 razy był tu prezentowany
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
/* Maksymalna dlugosc linii */
#define MAXLINIA 5000
/* dodaje znaki z lini do tablicy wystapien */
int zlicznaki(char *s, int tiznakow[]) {
int i; /* licznik petli */
if ((s != NULL) && (strlen(s) > 0)) {
for(i = 0; i < strlen(s); i++)
tiznakow[ (unsigned char) s[i] ]++;
}
return 0;
}
int main(int argc, char *argv[]) {
char slinia[MAXLINIA];
int i; /* licznik petli */
int imax = 0; /* ilość litery wytępujej najczęściej */
int ilosc = 0; /* ilość wystpapień najczestszego znaku */
int tiznakow[256]; /* Tablica zmiennych podliczjaca liczbe wystapien poszczegolnych znakow */
/* Wyzerowanie tablicy zliczjacej znaki */
for(i = 0; i < 256; i++)
tiznakow[i] = 0;
printf("Wprowadz zdanie: ");
fgets(slinia, MAXLINIA, stdin);
zlicznaki(slinia, tiznakow);
for(i = 0; i < strlen(slinia); i++)
if ((unsigned char) slinia[i] > 30)
printf("%c ----- %3i\n", slinia[i], tiznakow[(unsigned char) slinia[i] ]);
for(i = 31; i < 256; i++)
if (tiznakow[(unsigned char) i ] > imax)
imax = tiznakow[(unsigned char) i ];
printf("Najczesciej wystapily: ");
for(i = 31; i < 256; i++)
if (tiznakow[(unsigned char) i ] == imax) {
if (ilosc++)
printf(", '%c'", (unsigned char) i );
else
printf("'%c'", (unsigned char) i );
}
printf(" - %i razy\n", imax);
return 0;
}