Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] découper phrase

sans regex,ni split()

    4 octobre 2011 à 11:59:00

    Bonjour, voici le problème que je rencontre.
    je doit écrire la procédure decouper qui compte le nombre de mots d’une phrase et affiche ces mots
    un par ligne.
    Dans la phrase, les mots sont séparés par un ou plusieurs espaces ou séparateurs (virgule,
    point-virgule, double-points, apostrophe, guillemets). La phrase se termine à la fin de la
    chaîne ou par un caractère de ponctuation (. ! ?) .

    J'ai déjà fais pour qu'il prenne en compte les espaces:

    private void btn_decouper_Click(object sender, EventArgs e)
            {
                string s = txt_chaine1.Text;
    
                string res = decouper(s);
    
                lbl_decouper.Text = "Le nombre d'occurence est de : \n" + res;
            }
    
            public string decouper(string chaine)
            {
                char a = ',', b = '!', c = ' ';
    
                for (int i = 0; i < chaine.Length; i++)
                {
                    if (chaine[i].CompareTo(c) == 0 || chaine[i].CompareTo(a) == 0)
                    {
                        chaine = chaine.Substring(0, i) + "\n" + chaine.Substring((i + 1), ((chaine.Length - 1) - i));
                    }
                }
                return chaine;
            }
    


    Maintenant je ne sais pas comment prendre les autres , ; etc...
    On peux pas mettre de || dans un compareTo :/

    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      4 octobre 2011 à 12:14:21

      Crée un tableau (en static readonly histoire de pas le ré-instancier à chaque fois) qui contienne tous les symboles de ponctuation, et utilise Contains() dessus en donnant chaine[i] comme argument.
      • Partager sur Facebook
      • Partager sur Twitter
        4 octobre 2011 à 23:02:06

        Je ne peux pas utiliser de tableaux, la prof veux pas parce qu'on a pas encore vu. Mais sinon je saurais faire avec.
        • Partager sur Facebook
        • Partager sur Twitter
          5 octobre 2011 à 13:03:28

          Citation : zyhou


          ...

          private void btn_decouper_Click(object sender, EventArgs e)
                  {
                      string s = txt_chaine1.Text;
          
                      string res = decouper(s);
          
                      lbl_decouper.Text = "Le nombre d'occurence est de : \n" + res; // decouper() renvoie un string! pas un nombre d'occurence???
                  }
          
                  public string decouper(string chaine)
                  // la fonction doit aussi afficher les mots d'après l'énoncer
                  {
                      char a = ',', b = '!', c = ' ';
          
                      for (int i = 0; i < chaine.Length; i++)
                      {
                          if (chaine[i].CompareTo(c) == 0 || chaine[i].CompareTo(a) == 0)
                          {
                              chaine = chaine.Substring(0, i) + "\n" + chaine.Substring((i + 1), ((chaine.Length - 1) - i));
                          }
                      }
                      return chaine;
                  }
          




          je propose MA solution qui réponds strictement et bêtement a l'énoncé:
          using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Text;
          
          namespace StrTokenizer
          {
              class Program
              {
                  static int decouper(string chaine)
                  {
                      int count = 0;
                      bool dansmot = false;
                      bool encore = true;
                      int position = 0;
                      do 
                      {
                          switch (chaine[position])
                          {
                              // les séparateurs
                              case ' ':
                              case ',':
                              case ';':
                              case ':':
                              case '\'':
                              case '\"':
                                  if (dansmot == true)
                                  // si on était dans un mot
                                  {
                                      Console.Write("\n"); // on retourne a la ligne
                                      count++; // on incrément le nombre de mot trouvé
                                  }
                                  dansmot = false;
                                 break;
          
                              // conditions d'arrêts (fin de phrase):
                              case '.':
                              case '!':
                              case '?':
                              case '\0':
                                  if (dansmot == true)
                                  // si on était dans un mot
                                  {
                                      Console.Write("\n"); // on retourne a la ligne
                                      count++; // on incrément le nombre de mot trouvé
                                  }
                                  dansmot = false;
                                  encore = false;  // on demande l'arrêt de la boucle
                                 break;
          
          
                              // les lettres valides
                              default:
                                  dansmot = true;
                                  Console.Write("{0}", chaine[position]); // on écrit le caractère courant!
                                  break;
                          }
                          position++;
                      }while(encore);
                      return count;
                  }
          
                  static void Main(string[] args)
                  {
                      string chaine = "bonjour, c'est breizhbugs. Ce bout de phrase ne sera pas compté car faisant partie d'une deuxième phrase";
                      Console.WriteLine("il y a {0} mots dans la première phrase de \"{1}\"", decouper(chaine), chaine);
                  }
              }
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **

          [C#] découper phrase

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown