[c] Prpgram obliczajacy ilość słów i znaków

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
witcher23
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 22 paź 2008, 17:26
Płeć: Mężczyzna
Wersja Ubuntu: 8.10
Środowisko graficzne: GNOME
Kontakt:

[c] Prpgram obliczajacy ilość słów i znaków

Post autor: witcher23 »

Napisz program obliczający z ilu słów składa się wpisana z klawiatury fraza i jak długie sa to słowa. Do wczytywania kilku słów jednocześnie proszę użyc funkcji fgets z biblioteki stdio.h, proszę jednak nie uzywać żadnych funkcji z biblioteki string.h.


Oto kod:
#include <stdio.h>
main()
{
char tab[100];
int i=0,n=0;
fgets(tab,100,stdin);

while(tab!=NULL)
{
if(tab==' ' && tab[i+1]!=' ')
n++;
i++;
}

printf("\n%d\n\n",n+1);

int m;
i=0; m=0;
while(tab!=NULL)
{
;
if(tab!=' ' && tab[i+1]!=' ')
m++;
else
{ if(m!=0)
printf("%d ",m+1) ;
m=0;
}
i++;
}

getchar();
getchar();
}


Problem polega na tym, że program nie liczy długości ostatniego słowa.

Pozdrawiam
Awatar użytkownika
moridin
Sędziwy Jeż
Sędziwy Jeż
Posty: 57
Rejestracja: 06 gru 2008, 15:21
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: [c] Prpgram obliczajacy ilość słów i znaków

Post autor: moridin »

Sprawa jest w sumie banalna. Wedlug konwencji C kazdy string sie konczy znakiem nul wiec jezeli przegladasz petle do konca stringu oczywistym jest ze ostatni element zostanie pominiety. Musisz go wypisac poza petla, np tak:

Kod: Zaznacz cały

// ...
while(tab[i]!=NULL)
{
;
if(tab[i]!=' ' && tab[i+1]!=' ')
m++;
else
{ if(m!=0)
printf("%d ",m+1) ;
m=0;
}
i++;
}
if (m>1)
printf("%d", m-1) ;
// ...
Jednak proponowalbym troche te petle uproscic, dzieki czemu nie bedziesz musial uzywac 'dziwnych' m+1. Mozna to zrobic na przyklad tak:

Kod: Zaznacz cały

// ...
while (tab[i] != NULL) {
  if (tab[i] == ' ' || tab[i+1] == NULL) {
    if (m != 0) {
      printf ("%d ", m) ;
      m = 0 ;
    }
  } else
    m++ ;
  i++ ;
} 
// ...
PS: Zasadniczo nie jest zbyt dobrym pomyslem uzywanie NULL przy operacjach na stringach. Stosuj '\0'.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości