Witam! Mam powiedzmy tablicę char t[20], a w niej jakieś słowo. Teraz pytanie: Jak mam się dowiedzieć ile to słowo zajmuje miejsc w tablicy?
- Rejestracja:około 14 lat
- Ostatnio:prawie 14 lat
- Postów:7
Afish napisał(a)
Zazwyczaj po ostatnim znaku jest znak zerowy ('\0'), można go znaleźć ręcznie, albo funkcją strlen. A jeżeli nie ma tego znaku lub innego delimitera, to jest większy problem.
Gdyby to było takie proste to bym tutaj nie pisał :p
Btw. Strlen dla tablicy 15 elementowej zwraca 27
- Rejestracja:ponad 16 lat
- Ostatnio:około 14 lat
int i;
for(i=0; t[i]!='\0'; i++);
jak ci sie ta petla skonczy to w i masz ilosc znakow od pierwsszego elementu tablicy t do '\0' (nie liczac '\0') czyli dostajesz długość zdania
i konieczne jest tu aby licznik petli byl poza trescia petli (dlatego jest int i; for(...) a nie for(int i...) )
- Rejestracja:prawie 17 lat
- Ostatnio:prawie 13 lat
Tylko że strlen()
działa właśnie na tej metodzie, którą przedstawił @up - wobec tego jeśli strlen()
nie zadziała, Twój kod też nie zadziała :/.
Co do pytania - najwyraźniej albo musisz zacząć kończyć swoją tablicę charów znakiem '\0' lub po prostu gdzieś przechowywać długość ciągu.
- Rejestracja:około 14 lat
- Ostatnio:prawie 14 lat
- Postów:7
Valdemart napisał(a)
int i;
for(i=0; t[i]!='\0'; i++);
jak ci sie ta petla skonczy to w i masz ilosc znakow od pierwsszego elementu tablicy t do '\0' (nie liczac '\0') czyli dostajesz długość zdania
i konieczne jest tu aby licznik petli byl poza trescia petli (dlatego jest int i; for(...) a nie for(int i...) )
skoro strlen to i to nie zadziała
- Rejestracja:ponad 16 lat
- Ostatnio:około 14 lat
no to inny pomysł
skoro mówisz że w tablicy masz jakieś "słowo" to nie rozpoznawaj znaku konca łancucha tylko znak inny niz litera
przeciez słowa nie zawierają spacji ani cyfr ani znakow niedrukowalnych...
wtedy z t[i]!='\0 robi sie ((t[i]>='a')&&(t[i]<='z'))||((t[i]>='A')&&(t[i]<='Z'))

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
O czym wy w ogóle mówicie? Przecież w tablicy za tym "słowem" mogą być znaki które są literkami a do słowa nie nalezą. Odpowiedź jest prosta: nie da sie okreslić gdzie się to słowo kończy jeśli sam tego w jakis sposób nie oznaczysz (albo dając delimiter albo zapisujac jego długość).
- Rejestracja:około 14 lat
- Ostatnio:ponad 5 lat
- Postów:166
Jeśli z jakiegoś powodu nie możesz kończyć ciągu znakiem NULL, to w takim razie musisz zliczać zapisy i usunięcia z tablicy, albo po zaalokowaniu zeruj ją i ogranicznikiem z automatu będzie NULL:
char tab[20];
memset(tab, '\0', 20);
Po tym strlen() zadziała prawidłowo o ile długość ciągu (bez końcowego NULLa) będzie mniejsza niż 20.
Tablice w C nie przechowują danych o wielkości czy ilości "zajętego miejsca". Są to tylko obszary w pamięci i sam musisz zadbać o zarządzanie nimi. W przypadku łańcuchów znaków ich koniec oznacza się wstawieniem znaku '\0' i jest to jedyny sposób na stwierdzenie ich długości (tak działa strlen()).

- Rejestracja:ponad 16 lat
- Ostatnio:ponad 8 lat
Przy braku jakichkolwiek delimiterów, jedynym rozwiązaniem jest stworzenie słownika (np. http://en.wikipedia.org/wiki/Trie ) i znajdowanie według niego największego prefiksu w tablicy. :P