/* Extraction sous forme d'un tableau de chaines   */
/* de caracteres des mots existant                 */
/* dans une chaine de caracteres  en utilisant     */
/* le caractere espace comme delimiteur            */

public class UtilisationChaineEtTableauCaracteresEnConsole {

  /* Fonction d'affichage des valeurs contenues    */
  /* dans un tableau de double                     */

  static void affichage(String [] t) {
    int i;
    for ( i = 0 ; i < t.length ; i = i+1 ) {
      Console.afficher("\"",t[i],"\" "); }
  }

  /* Creation d'une chaine de caracteres           */
  /* a partir d'un tableau de caracteres           */

  static String chaineDeCarateres(char [] t) {
    int n = t.length;
    String s = "";
    int i;
    for ( i = 0 ; i < n ; i = i+1 ) {
      s = s+t[i]; }
    return s;
  }

  /* Creation d'une chaine de caracteres           */
  /* a partir d'un tableau de caracteres           */
  /* en utilisant les caracteres situes            */
  /* entre deux indices inclus                     */

  static String chaineDeCaracteres(char [] t,int indi,int indf) {
    int n = t.length;
    String s = "";
    int i;
    s = "";
    for ( i = indi ; i <= indf ; i = i+1 ) {
      s = s+t[i]; }
    return s;
  }

  /* Calcul du nombre de mots d'une chaine         */
  /* de caracteres transformee en un tableau       */
  /* de caracteres en utilisant le caractere ' '   */
  /* comme delimiteur                              */

  static int nombreMots(char [] tc) {
    int res = 0;
    int n = tc.length;
    int i = 0;
    if ( n > 0 ) {
      if ( tc[0] != ' ' ) {
        res = res+1; }
      for ( i = 0 ; i < n-1 ; i = i+1 ) {
        if ( ( tc[i] == ' ' ) && ( tc[i+1] != ' ' ) ) {
          res = res+1; } } }
    return res;
  }

  /* Calcul du nombre de mots d'une chaine         */
  /* de caracteres en utilisant le caractere ' '   */
  /* comme delimiteur                              */

  static int nombreMots(String s) {
    int res = nombreMots(Chaine.tableauCaracteres(s));
    return res;
  }

  /* Extraction sous forme d'un tableau de chaines */
  /* de caracteres des mots existant               */
  /* dans une chaine de caracteres en utilisant    */
  /* le caractere espace comme delimiteur          */

  static String [] decoupageEnMots(String s) {
    char [] tc = Chaine.tableauCaracteres(s);
    int n = tc.length;
    int nbMots = nombreMots(tc);
    String [] tMots = new String[nbMots];
    int m = 0;
    int i;
    int deb = 0;
    if ( n > 0 ) {
      for ( i = 0 ; i < n-1 ; i = i+1 ) {
        if ( ( tc[i] != ' ' ) && ( tc[i+1] == ' ' ) ) {
          tMots[m] = chaineDeCaracteres(tc,deb,i);
          m = m+1; }
        if ( ( tc[i] == ' ' ) && ( tc[i+1] != ' ' ) ) {
          deb = i+1; } }
      if ( tc[n-1] != ' ' ) {
        tMots[m] = chaineDeCaracteres(tc,deb,n-1);
        m = m+1; } }
    return tMots;
  }

  /* Programme principal                           */

  public static void main(String [] args) {
    Console.setTitle("UtilisationChaineEtTableauCaracteres");
    /* Creation d'une chaine de caracteres         */
    /* a partir d'un tableau de caracteres         */
    char [] t = { 'A','a','0','z','Z' };
    String s = chaineDeCarateres(t);
    Console.afficherln(s," : ",Chaine.longueur(s)," caracteres");
    Console.sautDeLigne();
    /* Creation d'un tableau de chaines            */
    /* de caracteres par extraction des mots       */
    /* d'une chaine de caracteres en utilisant     */
    /* le caractere espace comme delimiteur        */
    /* Test sur differentes chaines                */
    String s1 = "abc def 01 0";
    String [] tm1 = decoupageEnMots(s1);
    Console.afficher("Chaine : \"",s1,"\"\n",nombreMots(s1)," mots : ");
    affichage(tm1);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s2 = "  aaaa   ttt  ";
    String [] tm2 = decoupageEnMots(s2);
    Console.afficher("Chaine : \"",s2,"\"\n",nombreMots(s2)," mots : ");
    affichage(tm2);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s3 = "  aaaa   ttt";
    String [] tm3 = decoupageEnMots(s3);
    Console.afficher("Chaine : \"",s3,"\"\n",nombreMots(s3)," mots : ");
    affichage(tm3);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s4 = "aaaa   ttt  ";
    String [] tm4 = decoupageEnMots(s4);
    Console.afficher("Chaine : \"",s4,"\"\n",nombreMots(s4)," mots : ");
    affichage(tm4);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s5 = "000";
    String [] tm5 = decoupageEnMots(s5);
    Console.afficher("Chaine : \"",s5,"\"\n",nombreMots(s5)," mots : ");
    affichage(tm5);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s6 = "    ";
    String [] tm6 = decoupageEnMots(s6);
    Console.afficher("Chaine : \"",s6,"\"\n",nombreMots(s6)," mots : ");
    affichage(tm6);
    Console.sautDeLigne();
    Console.sautDeLigne();
    String s7 = "";
    String [] tm7 = decoupageEnMots(s7);
    Console.afficher("Chaine : \"",s7,"\"\n",nombreMots(s7)," mots : ");
    affichage(tm7);
    Console.sautDeLigne();
  }
}