Zliczanie słów w tablicy

Zliczanie słów w tablicy
bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

Czy ma ktoś pomysł, bo program działa, ale jak podam np." tak<space><space>" to wynikiem będzie 2 wyrazy

Kopiuj
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    char tab[]={"tak i "};
    int i = 0, amount = 0;
    while(tab[i] != '\0'){
	while( !isspace(tab[i]) != '\0')
	++i;
	++amount;
	++i;
	}

	printf("wyrazow=%d",amount);
    return 0;
}

wujnia
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 161
1

while( !isspace(tab[i]) != '\0')

Przyrównujesz tu bool (prawdę/fałsz) do 0. Raczej chyba nie o to chodzi prawda?

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

!isspace(tab[i]) != '\0'
isspace zwraca 0 lub 1, dlaczego porównujesz wynik do '\0'?

while(!isspace(tab[i])) jest czytelniejsze.

Dolicza dodatkowy wyraz, ponieważ bezwarunkowo zwiększasz i tylko o jeden, nie sprawdzając ile masz faktycznie spacji pomiędzy wyrazami. Prześledź wykonanie programu pod debuggerem.

bartek164
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 534
0

no ja rozumiem, to jeśli jest więcej niż jeden znak biały to co zrobić

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Zignoruj wszystkie białe znaki w pętli. Teraz zahardkodowałeś 1 znak, więc jeśli masz string niezakończony białym znakiem, np. "taakjsdnkjadnskjandkjaskdnkasndasdkjaskjdnkjansxkjakjdnskjasndkjasndkjaskjdnkjasndkjandjs", to wyjdziesz poza tablicę powodując UB.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.