Funkcja na wyodrębnianie słów

1

Witam,
czy istnieje jakaś funkcja w C, która z podanego zdania wyodrębnia słowa (separator jako spacja) i zapisuje je do tablicy? Jak to można wykonać?

0

jeśli masz jakieś zdanie, to sama funkcja scanf() pobiera łańcuch do momentu, w którym zostanie wykryty znak taki jak spacja, nowa linia czy tabulator, więc wystarczy pobierać kolejne wyrazy np. do tablicy do momentu, w którym zostanie wykryty znak nowej linii, jeśli podajesz dane zdanie w konsoli przy wywołaniu programu.

0

strtok() http://www.cplusplus.com/reference/cstring/strtok/
ale odradzam jej użycia, bo jest straszliwie wolna.

0

A jak już podzieliłem to zdanie, to w jaki sposób podziałać na nowej zmiennej, żeby wypisać ilość powtórzeń danego słowa?

Całość programu:

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

int main ()
{
  char zdanie[200];
  printf("Podaj zdanie: ");
  gets(zdanie);
  // BEGIN - ZAMIAN LITER Z WIELKICH NA MAlE
  int a;
  a = strlen(zdanie);
  int i;
  for(i=0; i<a; i++) {
	if(isupper(zdanie[i])) { zdanie[i]=zdanie[i]+32; }
  }
  	// printf("Twoje zdanie to: %s \n", zdanie);
  // END - ZAMIANA LITER Z WIELKICH NA MAŁE
  // BEGIN - ROZDZIELENIE ZDANIA NA SLOWA
  
  char separator[] = " ,.-";
  char * rozdzielone;
  rozdzielone = strtok(zdanie, separator);
    while( rozdzielone != NULL )
    {
        printf( "%s\n", rozdzielone );
        rozdzielone = strtok( NULL, separator );
    }
    
  printf("%s", rozdzielone);
  // END - ROZDZIELENIE ZDANIA NA SLOWA
}
0
  1. dodawać do mapy lub drzewa binarnego slowo -> licznik
  2. posortować listę słów, więc wszystkie powtórzenia będą po kolei
0

Ale wcześniej muszę jakoś wyliczyć ile słów jest identycznych w zdaniu? Czy zmienna "rozdzielone" z powyższego programu to tablica? Bo program faktycznie zwraca pojedynczo elementy, tylko jak się odwołać do poszczególnych elementów? Sorry, za tak banalne pytania i za to, że zaśmiecam ten dział, ale jestem totalnie zielony w C. :-(

0

W jaki sposób z funkcji strtok można wyciągnąć konkretne słowo?

0
Dartam napisał(a):

W jaki sposób z funkcji strtok można wyciągnąć konkretne słowo?

Nie da się, możesz najwyżej dodać je do jakieś listy, wektora, tablicy wskaźników.

0

Można prościej. Jak dzielisz zdanie zrób sobie tablice, np.

int *count; char **slowa;

W tablicy slowa będziesz po kolei umieszczał każde nowe słowo, którego jeszcze nie ma w tej tablicy. Np umieszczasz 1sze_słowo w tablicy slowo, to piszesz, że:

strcpy(slowa[index], 1sze_slowo); /*skopiuj slowo do tabelki*/
count[index] = 1;

Jeżeli dostaniesz słowo, które już istnieje w tablicy slowa, to patrzysz pod jakim indexem w tablicy jest zapisane to slowo i piszesz:

count[index]++; 

Ten kod jest raczej orientacyjny, ma pokazać koncepcję programu, a nie dać Ci gotowe rozw. na tacy.
To tyle, mam nadzieję, że pomogłem ;)

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