
#define MAX_STRINGS	300	/* Die Maximalzahl verschiedener Worte    */
#define MAX_WORDLENGTH	31	/* Die maximale Wortlaenge (+1 fuer '\0') */


int string_cmp(char *s1, char *s2);
char *next_word(char *word);
int insert_word(char *string, char *all_words[], int no_of_words);

/*
 * Die Main-Funktion...
 */


/*
 * Teilaufgabe a: Parsen der Kommandozeilenoptionen.
 */
void parse_ops(int argc, char *argv[], int *flag_c, int *flag_w, int *flag_l, int *flag_s)
{
}


/*
 * Teilaufgabe b: Zeichen, Woerter und Zeilen zaehlen.
 */


/*
 * Teilaufgabe c: Woerter einlesen und sortieren.
 */


/*
 * Teilaufgabe d
 */
void swap(char **a, char **b)
{
}
 
void string_sort(int cnt, char *strings[])
{
}



/*****************************************************************/
/* Hier folgen die in den Tafeluebungen vorgestellten Funktionen */
/*****************************************************************/



/*
 * Vergleich zweier Zeichenketten (gleiche Funktionalitaet wie
 * die Bibliotheksfunktion strcmp(); siehe "man strcmp")
 * liefert: 0, wenn die Zeichenketten identisch sind
 *          1, wenn die erst Zeichenkette lexikographisch groesser
 *             ist als die zweite
 *         -1, wenn die erst Zeichenkette lexikographisch kleiner
 *             ist als die zweite
 */
int string_cmp(char *s1, char *s2)
{
  while(*s1 && *s2 && (*s1==*s2))
    {
      s1++;
      s2++;
    }
  if(*s1 > *s2)
    return 1;
  if(*s1 < *s2)
    return -1;
  return 0;
}

/*
 * Funktion zum Einlesen des naechsten Wortes.
 * Woerter laenger als MAX_WORDLENGTH werden abgeschnitten!
 * liefert: Zeiger auf eingelesenes Wort 
 *          NULL, falls Eingabeende erreicht wurde
 */
char *next_word(char *word)
{
  char *wp;
  int ch, count;

  /* Alles ueberlesen bis zum naechsten alphanumerischen Zeichen */
  while(((ch = getchar()) != EOF) && !isalnum(ch));

  /* Hoppla, Eingabe ist leer */
  if(ch == EOF)
    return NULL;
   
  /* alles einlesen bis zum naechsten nicht alphanumerischen Zeichen
     (Bindestriche stellen eine Ausnahme dar) */
  wp = word;
  count = 0;
  do
    {
      *wp++ = ch;

      /* Testen, ob die maximale Wortlaenge nicht ueberschritten wird */
      count++;
      if(count == MAX_WORDLENGTH-1)
	break;

      ch    = getchar();
    }while(isalnum(ch) || (ch=='-'));

  *wp= '\0';
  return word;
}

/*
 * Einfuegen eines Wortes in die Liste erfasster Worte
 * liefert:  0 falls Wort bereits bekannt war
 *           1 falls es sich um ein neues Wort handelt
 */
int insert_word(char *string, char *all_words[], int no_of_words)
{
  int i;

  /* Testen, ob das Wort bereits erfasst wurde */
  for(i=0;i<no_of_words;i++)
    if(string_cmp(all_words[i], string)==0)
      return 0;

  /* Test, ob noch fuer ein neues Wort Platz ist */
  if(no_of_words==MAX_STRINGS)
    {
      fprintf(stderr,"Fehler: Text enthaelt zu viele verschiedene Woerter\n");
      exit(-1);
    }

  /* Neues Wort erfassen */
  all_words[no_of_words] = string;
   
  return 1;
}

