Algorithme "suppression des espaces chaine de caractère"
Répondre à la discussion
Affichage des résultats 1 à 18 sur 18

Algorithme "suppression des espaces chaine de caractère"



  1. #1
    invite63f47c2c

    Algorithme "suppression des espaces chaine de caractère"


    ------

    Bonjour !

    Je dois écrire un algortithme supprimant les espaces d'une chaine de caractère .

    J'avais initialement écrit un algorithme qui après avoir demander une phrase a l'utilisateur , parcourait cette phrase (enfin le tableau qui contient les caractere de la phrase) et que des que T[i] prenait la valeur de ' ' (espace) alors T[i] <-- T[i+1] et qui supprimait donc les espaces par "décalage" cependant mon professeur de travaux dirigé m'as dit de ne pas faire comme sa car ils pouvait y avoir un probleme (bien que je n'ai pas saisi pourquoi ...) donc voila auriez-vous un début de reflexion a me proposer ?
    Merci a d'avance a ceux qui me répondrons

    -----

  2. #2
    invite2216f80a

    Re : Algorithme "suppression des espaces chaine de caractère"

    Salut,

    Tu as deux choix,

    le premier est celui auquel tu as pensé, tu parcours le tableau avec une boucle et tu testes si le caractères est un espace; si oui il te faut mettre le i+1 à la place en décalant.

    le deuxième, plus facile, tu as deux tableaux. Tu parcours le premier tableau (avec espaces) et à chaque fois tu ajoutes dans le nouveau tableau le caractères s'il n'est un espace.

    Pigé?

  3. #3
    invite63f47c2c

    Re : Algorithme "suppression des espaces chaine de caractère"

    ah ok ! merci bien je vais essayer cette métode

  4. #4
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par tim-tam Voir le message
    Bonjour !

    Je dois écrire un algortithme supprimant les espaces d'une chaine de caractère .

    J'avais initialement écrit un algorithme qui après avoir demander une phrase a l'utilisateur , parcourait cette phrase (enfin le tableau qui contient les caractere de la phrase) et que des que T[i] prenait la valeur de ' ' (espace) alors T[i] <-- T[i+1] et qui supprimait donc les espaces par "décalage" cependant mon professeur de travaux dirigé m'as dit de ne pas faire comme sa car ils pouvait y avoir un probleme (bien que je n'ai pas saisi pourquoi ...) donc voila auriez-vous un début de reflexion a me proposer ?
    Merci a d'avance a ceux qui me répondrons
    C'est vrai pour le 1er espace. A partir du 2ème, il faudra décaler de T[i+2], etc.

    Il faut donc calculer le nombre de décalages à partir du nombre d'espaces détectés.

    A+

  5. A voir en vidéo sur Futura
  6. #5
    invitea09e49c1

    Re : Algorithme "suppression des espaces chaine de caractère"

    Heu et les fonctions join et split ?
    C'est pas le plus simple au monde ?

    Je sais pas dans quel langage tu programme ton algorithme mais je te donne un exemple en PERL. Tu dois avoir des équivalents dans d'autres langages mais le principe est ultra simple.

    Code:
    #!/usr/bin/perl
    
    use strict; #Forcer la déclaration des noms de variable (utilisation du my pour déclarer)
    
    my $string_avec_espace = <STDIN>;  #L'utilisateur saisi sa phrase
    
    my @tout_les_mots = split(/\s+/, $string_avec_espace);
    #Explications plus bas ^^
    
    my $string_sans_espace = join("", @tout_les_mots);  #Et voilà pas d'espaces dans cette string et en 3 lignes !
    Voici les explications sur les 2 fonctions :

    split
    Met dans un tableau les parties définies par le séparateur et issue d'une chaine de caractère.
    @tab = split(séparateur, $string);

    /\s+/ = le séparateur est sous forme d'une expression rationnelle et \s+ signifie 1 ou plusieurs espaces.
    Donc je met dans le tableau et dès que je trouve un espace je change de case du tableau.

    join
    Concatène avec un séparateur le contenu dun tableau
    $string = join(séparateur, @tab);

    Je veux comme séparateur rien donc => ""



    Enfin ça c'est en PERL et c'est la méthode la plus simple que je connaisse. Soit 3 lignes...
    Je sais pas si ces fonctions existent dans ton langage mais tu devrais pouvoir trouver des équivalent.

  7. #6
    doul11

    Re : Algorithme "suppression des espaces chaine de caractère"

    Bonjour,

    Citation Envoyé par Jack Voir le message

    Il faut donc calculer le nombre de décalages à partir du nombre d'espaces détectés.
    Enfin calculer est un bien grand mot, il suffit de ne pas incrémenter l'index d'écriture quand le caractère lu est un espace.
    La logique est une méthode systématique d’arriver en confiance à la mauvaise conclusion.

  8. #7
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    Tu pinailles. Une incrémentation est bien une forme de calcul, non?

    A+

  9. #8
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par Le Génie de la Lampe Voir le message
    Heu et les fonctions join et split ?
    C'est pas le plus simple au monde ?
    En fait, c'est un algorithme qu'on réclame ici, pas une implémentation. Si tu veux une implémentation simple et beaucoup plus rapide, tu peux par exemple faire ça (en C) :
    Code:
    void supprimeEspaces(char *str) {
      char c;
      char *dest = str;
      while (c=*str++) if (c!=' ') *dest++ = c;
      *dest = '\0';
    }
    Dernière modification par PA5CAL ; 04/05/2012 à 21h44.

  10. #9
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    C'est pas bien de donner les solutions toutes faites ...

  11. #10
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par Jack Voir le message
    C'est pas bien de donner les solutions toutes faites ...
    Ce n'est pas la solution. Ce qui est demandé est un algorithme, et ce bout de code n'est qu'un exemple découlant de ce qui a déjà été expliqué plus haut.

    Si tim-tam se contente de recopier ce bout de code, qui ne fonctionne que dans des conditions particulières, je pense que son professeur ne manquera pas de lui réclamer des explications. Et s'il ne connaît pas l'algorithme sous-jacent, il sera bien en mal de lui répondre.
    Dernière modification par PA5CAL ; 04/05/2012 à 22h02.

  12. #11
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    C'est un peu tordu comme raisonnement

    On a plutôt l'habitude de produire un algo afin de le coder dans un langage cible et pas l'inverse.

    A+

  13. #12
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par Jack Voir le message
    On a plutôt l'habitude de produire un algo afin de le coder dans un langage cible et pas l'inverse.
    Exactement. Et c'est pour ça que je dis que je n'ai pas donné la solution.

    Par exemple, le bout de code en C que j'ai donné est incapable de traiter correctement les chaînes de caractères Unicode. En revanche la connaissance de l'algorithme qui est demandé permet de coder le programme adéquat.

  14. #13
    invite2216f80a

    Re : Algorithme "suppression des espaces chaine de caractère"

    Ton bout de code est loin d'être le plus simple à comprendre aussi! Moi même, ayant fait du C et quelques autres langages, il m'a fallu un peu de temps, c'est aussi possible de le coder plus simplement...

  15. #14
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par defender19 Voir le message
    Ton bout de code est loin d'être le plus simple à comprendre aussi!
    C'est parce que le codage n'a pas pour but de décrite un algorithme, mais de traduire ce dernier pour le faire fonctionner dans un environnement donné. Il en résulte que :
    - parce qu'il répond à des contraintes particulières, le code ne constitue plus qu'un des produits dérivés possibles de l'algorithme qu'il met en oeuvre ;
    - la description (littéraire) de l'algorithme peut ne plus avoir qu'un obscur rapport avec le code final.

    En la matière, « simple » ne signifie pas « simple à comprendre », puisque le code n'est normalement pas destiné aux humains, mais à la machine.

  16. #15
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    puisque le code n'est normalement pas destiné aux humains, mais à la machine
    Ca se discute. Il faut penser maintenance en écrivant le code. Il peut exister plusieurs syntaxes ou présentations équivalentes d'un code conduisant à la même efficacité au niveau exécution.

    A+

  17. #16
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par Jack Voir le message
    Ca se discute. Il faut penser maintenance en écrivant le code. Il peut exister plusieurs syntaxes ou présentations équivalentes d'un code conduisant à la même efficacité au niveau exécution.
    Ce qui est indiscutable, c'est qu'on code normalement pour la machine, et certainement pas pour des curieux de passage qui ne connaissent rien au langage utilisé.

    Un code peut parfaitement rester compréhensible et maintenable grâce aux éléments d'information fournis en dehors de la partie destinée à la machine, et en présentant cette partie de façon claire sans trop en affecter la syntaxe. Ainsi, si je n'avais pas souhaité pousser le trait ici, j'aurais effectivement pu développer mon code sur plusieurs ligne, utiliser des noms de variables plus parlants, et ajouté des commentaires.

    Il n'en reste pas moins que s'il peux bien exister plusieurs syntaxes conduisant à la même efficacité, il existe surtout des syntaxes qui n'y conduiront jamais, même avec un excellent programme d'optimisation.


    J'ai personnellement eu à faire les frais d'un excès de cette volonté de « lisibilité » au cours d'un long projet de portage/réécriture (il y avait donc déjà au départ un logiciel fonctionnel qui pouvaient servir de référence). Ce projet a abouti, après de multiples dépassements de délais, à la production d'un code démesuré (plus de 20 fois la taille du code d'origine) et un logiciel lent et excessivement gourmand en ressources (une journée de traitement sur un gros PC contre quelques dizaines de minutes sur une configuration légère dans la version originale), et qui s'est avéré finalement inexploitable et a été abandonné à la fois par le client et par l'éditeur.

    Tout ça pour dire qu'il ne faut jamais perdre de vue l'objectif principal. Et celui du codage n'a jamais été de produire de la littérature pour le quidam. L'algo, on le trouve normalement dans la doc, pas dans le code.
    Dernière modification par PA5CAL ; 05/05/2012 à 11h53.

  18. #17
    Jack
    Modérateur

    Re : Algorithme "suppression des espaces chaine de caractère"

    oui, d'accord. Reconnais néanmoins que ta phrase affirmant que le code (comprendre le langage source) n'était destiné qu'à la machine était réducteur.

    A+

  19. #18
    PA5CAL

    Re : Algorithme "suppression des espaces chaine de caractère"

    Citation Envoyé par Jack Voir le message
    oui, d'accord. Reconnais néanmoins que ta phrase affirmant que le code (comprendre le langage source) n'était destiné qu'à la machine était réducteur.
    J'admets que j'aurais dû dire, pour éviter tout malentendu, que le code était prioritairement destiné à la machine.

    Concernant le « code » destiné à la seule lecture par les humains, on parle plutôt de « pseudo-code », même si très souvent on utilise la syntaxe d'un véritable langage de programmation.
    Dernière modification par PA5CAL ; 05/05/2012 à 13h11.

Discussions similaires

  1. Saisie d'un caractère sans taper sous "Entrer"
    Par invite6ae216d1 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 03/08/2011, 05h59
  2. Réponses: 33
    Dernier message: 04/02/2009, 18h02
  3. Locus de caractère quantitatif "QTL"
    Par invite10382d0f dans le forum Biologie
    Réponses: 3
    Dernier message: 14/05/2007, 08h30
  4. Météo France souligne le caractère "spectaculaire" des températures de cet automne
    Par invite600c2730 dans le forum Environnement, développement durable et écologie
    Réponses: 0
    Dernier message: 30/10/2005, 13h49