C- Dzielenie stringa na cześci

0

Mam do podzielenia string na pojedyncze wyrazy gdy wystąpią takie znaki jak:

  • spacja
  • przecinek
  • kropka

Mam działający kod, najprostszy chyba jaki może być, który działa dla JEDNEGO z wybranych znaków.

#include <stdio.h> 
#include <string.h> 

int main()
{
char tekst[100]; 
char *pojedynczy_wyraz; 

gets(tekst); 

pojedynczy_wyraz = strtok(tekst, " "); 

while(pojedynczy_wyraz!=NULL)
{
  printf("%s\n", pojedynczy_wyraz); 
  pojedynczy_wyraz = strtok(NULL, " "); 
} 

return 0; 
}
 

Podany wyżej kod działa dla wszystkich wyżej wymienionych znaków ale nie chce działać gdy chcę by działał dla nich naraz.
Tzn. działa dla pojedynczo wybranych znaków, natomiast np. dla dwóch już nie.

#include <stdio.h> 
#include <string.h> 

int main()
{
char tekst[100]; 
char *pojedynczy_wyraz; 

gets(tekst); 

pojedynczy_wyraz = strtok(tekst, " "); // dla spacji
pojedynczy_wyraz = strtok(tekst, "."); // dla kropki


while(pojedynczy_wyraz!=NULL)
{
  printf("%s\n", pojedynczy_wyraz); 
  pojedynczy_wyraz = strtok(NULL, " "); 
  pojedynczy_wyraz = strtok(tekst, "."); 
} 

return 0; 
}
 

Co robię nie tak ?

0

Kłania się korzystanie z dokumentacji: http://www.cplusplus.com/reference/cstring/strtok/ . Według niej, możesz umieścić kilka znaków, które będą delimiterami - wystarczy upakować je obok siebie w stringu. Dodatkowo możesz użyć pętli do-while zamiast while, aby kod był czytelniejszy.

0

Przeanalizuj przykład.

 char input[] ="Prosty,sucharny przyklad.Dzieli stringa.";
 char *token;
 token = strtok(input," ,.");
 while(token != NULL)
 {
   printf("%s\n", token);
   token = strtok(NULL, " ,.");
 }
0

Faktycznie, dokumentacja na to zezwala, co mnie trochę zaskoczyło. Dzięki!

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