Czołem
Mam do wykonania następujące zadanie:
Napisz program, który zrobi statystykę wystąpień słów pod względem ich długości. Słowa to ciągi następujących po sobie liter. Na wyjściu ma się pojawić długość słowa i liczba wystąpień słów o takiej długości, w kolejności od najkrótszych do najdłuższych. Program ma wypisać długości tylko tych słów, które pojawiły się przynajmniej raz w tekście. Przyjmij, że długość ciągu wejściowego nie przekroczy 1000 znaków.
Przykładowe wejście:
Podaj tekst:
To jest przykladowe zdanie testowe
Przykładowe wyjście:
2 - 1
4 - 1
6 - 1
7 - 1
11 - 1
Po dłuższym przemyślunku rozpisałem coś takiego:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
char tablica1[1001]={0};
int i=0;
int s=0;
int wyniki[1000]={0};
printf("Podaj tekst :\n");
fgets(tablica1,1001,stdin);
int ile_liter[1001]={0};
int licznik=0;
while(tablica1[i]!='\0')
{
if( (tablica1[i]>=65 && tablica1[i]<=90 ) || (tablica1[i]>=97 && tablica1[i]<=122 ) )
{
licznik++;
}
if((tablica1[i]>=65 && tablica1[i]<=90 ) || (tablica1[i]>=97 && tablica1[i]<=122 ) && ( (tablica1[i+1]>=32 && tablica1[i+1]<=47) || tablica1[i+1]==' ' || tablica1[i+1]=='\0' ) )
{
ile_liter[licznik]++;
licznik=0;
}
i++;
}
for(s=1;s<=1000;s++)
{
if(ile_liter[s]==0)
{
}
else
{
printf("%d-%d\n",s,ile_liter[s]);
}
}
return 0;
}
No i nie działa. Dla przykładowych danych wejściowych nie zgadzają się dwie rzeczy:
-powinien być tylko jeden wyraz o dwóch literach, a tutaj pokazuje, że są dwa wyrazy jednoliterowe
-brakuje informacji o jednym wyrazie siedmioliterowym
Bardzo proszę o pomoc. :(
EDIT
Drugi problem chyba rozwiązałem, po rozbudowaniu drugiej instrukcji warunkowej:
if((tablica1[i]>=65 && tablica1[i]<=90 ) || (tablica1[i]>=97 && tablica1[i]<=122 ) && ( (tablica1[i+1]>=32 && tablica1[i+1]<=47) || tablica1[i+1]==' ' || tablica1[i+1]=='\0' || tablica1[i+1]=='\n' || tablica1[i+1]==13 ) )
pokazuje mi poprawną informację o wyrazie siedmioliterowym.