Zliczanie słów w tablicy

0

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

#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;
}

1

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

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

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.

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1