IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Transformer une chaîne de caractères en tableaux sans .split


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 21
    Points
    21
    Par défaut Transformer une chaîne de caractères en tableaux sans .split
    Bonjour,

    Connaissez-vous une function qui permet de séparer une chaîne de caractères, séparé par des occurrences, sans la méthode .split ?
    j'hésite à lire la chaine de caractères avec une boucle while.
    Tant que i < occurence
    mais je suis pas sur du départ, qu'en pensez-vous ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    re,

    Tant que i < occurence
    mais je suis pas sur du départ, qu'en pensez-vous ?
    lol si tu dis pas c'est quoi occurrence, ni i c'est dur d'en penser quoique ce soit

    l'approche usuelle est pblmnt de type je parcours la chaine
    des que je trouve une occurrence du delimiteur j'ajoute de là ou je m'étais arreté jusqu'à maintenant
    je passe le délimiteur, et je recommence

    une illustration ci-dessous (pas checké la syntaxe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    var arr = [];
    //s la chaine
    var s = 'bob met son bob de bobo à la plage'
    //delim la chaine qui "sert de delimiteur"
    var delim = 'bob'
    for(var i = 0, i<s.length; ++i{
        var idx = s.indexOf(delim);
        if(idx == -1){
            //s est finie..
            arr.push(s)
        }else{
            //on push l'occurrence capturée
            arr.push(s.substring(0, idx))
     
            //et on "consomme" l'occurrence 
            s = s.substring(idx + delim.length)
        }
    }
    une variante un peu plus marante avec replace et l'utilisation du cbk à chaque occurrence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var s = 'bob met son bob à la plage'
    var delim = 'bob'
    var reg = new RegExp(delim, 'g')
    var indexes = []
    s.replace(reg, (_,idx)=>indexes.push(idx))
    indexes.push(s.length)
    var [arr,_] = indexes.reduce(([arr,last],idx)=>{
        arr.push(s.substring(last+delim.length,idx))
        return [arr, idx]
    },[arr, -delim.length])
    console.log('arr :', arr)
     
    //arr : [ '', ' met son ', ' à la plage' ]

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    merci pour ta réponse très clair. entre deux j'avais trouvé une réponse mais je suis pas sur d'avoir vraiment bien compris le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function splitStr(str, occurence) {
      let arr = [''];
      let  j = 0;
     
      for (let i = 0; i < str.length; i++) {
        if (str.charAt(i) == occurence) {
          j++;
          arr.push('');
        } else {
          arr[j] += str.charAt(i);
        }
      }
      return console.log(arr);
    }
    je comprends pas cette partie :
    je comprends pas ce que j vient faire ici dans la boucle, et je ne comprends pas comment la colonne du tableau est créée, est ce qu'elle est créée par ('') ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    lapproche est différente, l'auteur alloue une nouvelle chaine.
    d'ou arr.push('') et j++
    et apres il refere à cette nouvelle chaine avec arr[j]
    et il concatene sur cette nouvelle chaine...

    c'est un peu triste parce que occurrence est de fait non pas un string qq mais un string de taille 1 (un char somme toute)
    une alternative qui est sémantiquement pareil
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function splitStr(str, occurence) {
      let arr = [];
      let myJunkString = ''
     
      for (let i = 0; i < str.length; i++) {
        if (str.charAt(i) == occurence) {
          arr.push(myJunkString)
          myJunkString = ''
        } else {
          myJunkString += str.charAt(i);
        }
      }
      return console.log(arr);
    }
    edit: quitte à forcer le délimiteur à etre un char, voici un oneliner (c'est plus js que algorithmique mais bon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    delim = 'b'
    [].reduce.call('abcbdbeabvbc',(v,c)=>c==delim?v.concat(''):(v[v.length-1]+=c,v),[''])
    //[ 'a', 'c', 'd', 'ea', 'v', 'c' ]
    c'est la même version de l'auteur mais en utilisant le langage..
    Dernière modification par Invité ; 29/09/2018 à 23h16.

  5. #5
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    OUCH ! faut que j'étudie le oneliner , je vais déjà apprendre les bases mais toutes ces fonctions que je viens de voir vont être gardé au chaud !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Transformer une chaîne de caractères
    Par Crachover dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/07/2018, 17h49
  2. [XL-2007] VBA. Transformer une chaîne de caractère en date
    Par kimou75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2016, 16h36
  3. [Visual I/O] Transformer une chaîne de caractères en un nom de variable
    Par GlaD69 dans le forum Autres IDE
    Réponses: 0
    Dernier message: 20/09/2012, 17h13
  4. Réponses: 3
    Dernier message: 09/02/2009, 18h46
  5. Transformer une chaîne de caractères en lien hypertexte
    Par laurentdepibrac dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/05/2008, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo