Na początek chciałbym się przywitać, bo to mój pierwszy post :)
Treść zadania:
Zaimplementuj program, który wczyta ze standardowego wejścia tekst do analizy, a następnie dla każdej litery
obliczy liczbę jej wystąpieńw tekście i wypisze wynik na standardowe wyjście.
W pierwszym wierszu program przyjmuje liczbę wierszy tekstu do analizy ( ≤150). W każdym z następujących
wierszy ciąg złożony z maksymalnie 200 znaków spośród małych i wielkich liter alfabetu łacińskiego ('a'..'z',
'A'..'Z') oraz spacji.
Przykład
Wejście:
2
ala ma kota
Ola ma psa
Wyjście:
a 7
k 1
l 2
m 2
o 1
p 1
s 1
t 1
O 1
Niestety, samo zadanie, moja niewiedza i kompilator całkowicie zniszczyły mi mózg i nie jestem w stanie wykonać tego prostego zadania.
Zadanie generalnie postanowiłem zrealizować na zasadzie utworzenia dwuwymiarowej tablicy typu char w której upchałbym te wszystkie zdania, a potem zrobić jakieś liczniki zliczające wystąpienia poszczególnych liter i to wyświetlił. Niestety, nawet nie dotarłem do planowania drugiej części zadania, bo ta pierwsza mnie przerosła.
#include <stdio.h>
#include <string.h>
int main(){
int liczba_wierszy,i;
char **wiersz;
char wiersz2[200];
printf("Podaj liczbe wierszy do analizy: ");
scanf("%d",&liczba_wierszy);
wiersz=(char**)malloc(liczba_wierszy*sizeof(*wiersz));
for(i=0;i<liczba_wierszy;i++){
wiersz[i]=(char*)malloc(200*sizeof(**wiersz));
}
for(i=0;i<liczba_wierszy;i++){
fgets(wiersz2,199,stdin);
strcpy(wiersz[i],wiersz2);
}
printf("%s",wiersz[1]);
getche();
return 0;
}
Problem przerósł mnie w pętli - kiedy jest taki warunek jaki jest, program wczytuje (liczba_wierszy-1) linijek zamiast (liczba_wierszy). Kiedy próbowałem barbarzyńsko to obejść dodając w warunku +1 do (liczba_wierszy) - cały program mi się wykrzacza. Z jakiegoś powodu nie działa mi funkcja fgets w odniesieniu do tablicy dwuwymiarowej (czyli fgets(wiersz[i],199,stdin) po prostu nie działa i wykrzacza program, przez co robiłem to za pomocą pomocniczego chara wiersz2 i "strcpy"
), kompilator mi wariuje i funkcja fgets działała wcześniej tylko wtedy, kiedy wywołałem ją 2 razy pod rząd. Na dodatek, linijka testowa printf("%s",wiersz[i]);, niezależnie od "i" wypisuje mi zawsze pierwszy wczytany przez program wiersz, co oznacza, że to co jest w pętli po prostu nie działa.
Wiem, że kod zapewne wygląda strasznie i w ogóle do d**y, ale każdy kiedyś się uczył. Poprosiłbym o pomoc, sprawdzenie tego programu albo zaproponowanie jakiegoś innego rozwiązania (tylko jakieś proste, bez funkcji bibliotecznych z kosmosu)
Shalomwczyta
...tekst
do analizy,a następnie
...". Aczkolwiek można wczytać do głupiegochar Text[150][202];
i też będzie zgodnie z zadaniem.