Strona 1 z 1

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

: 06 gru 2008, 22:13
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

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

: 07 gru 2008, 13:37
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'.