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

 C Discussion :

problème de remplacement de caractère dans une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut problème de remplacement de caractère dans une chaine
    BOnjour voici mes fonctions:
    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
    20
    21
    //Reverse-Complment of sequence
    char revcomp (char s) {
    	if (s == 'A') return 'T';
    	else if (s == 'C') return 'G';
    	else if (s == 'G') return 'C';
    	else if (s == 'T') return 'A';
    	return 'A';//error
    }
     
    char* reversecomplement (char* s){
    	char* rc;
    	char c;
    	rc=malloc(strlen(s)*sizeof(char));
    	int i=0;
    	for (i = strlen(s) - 1; i >= 0; i--){
    		c=revcomp(s[i]);
    		rc[strlen(s)-i]=c;
    	}
    	fprintf(stdout,"\nrevcomp: %s ",rc);
    	return rc;
    }
    le problème ici, quand j'affiche rc. ça marche pas.
    Est-ce que vous pouvez m'aider?
    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,
    Tu alloues suffisamment de place à rc pour que cette chaîne contienne strlen(s)-1 caractère sans compter le zéro terminal, i.e. de 0 à strlen(s)-2 tu as tes caractères et à strlen(s)-1 le 0 terminal.
    Dans ta boucle, i commence à strlen(s)-1 tu ajoutes strlen(s) ça fait 2*strlen(s)-1 ce qui forcément sort de rc.
    Il faut revoir ton algo.

  3. #3
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    j'ai modifié le programme c'est strlen(s)-i.
    mais ça marche pas aussi

  4. #4
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Description hyper claire de ton problème !

    Tu as modifié l'allocation ou pas ? Si ce n'est pas le cas tu auras toujours un bug.
    Fais un dessin, tu comprendras mieux je pense.

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 317
    Par défaut
    désolé.
    Je n'ai pas bien compris ton idée.
    pourquoi modifié l'allocation? la chaine resultate est de meme taille que la chaine passé en paramètre.

  6. #6
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    La chaîne "bonjour" contient 7 caractères mais 8 octets 'b','o','n','j','o','u','r','\0'.
    strlen te donne le nombre de caractères sans le 0 terminal donc 7, pas la taille nécessaire pour tout stocker qui est 8 (7+1 pour le 0 terminal). Essaye de revoir un tuto sur les chaînes de caractères.

    Essaye peut-^etre aussi de décomposer tes fonctions : une pour le complément, puis une pour la renverser. Ce sera plus facile pour toi de debuguer.

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

Discussions similaires

  1. Remplacement de caractères dans une chaines
    Par jeanmi681 dans le forum Langage
    Réponses: 9
    Dernier message: 18/06/2009, 16h06
  2. Remplacer des caractères dans une chaine et enlever certains
    Par Lucas Panny dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/01/2009, 14h26
  3. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  4. Remplacer des caractères dans une chaine interbase 7.5
    Par zaydoun_391 dans le forum InterBase
    Réponses: 1
    Dernier message: 15/04/2008, 16h57
  5. Réponses: 4
    Dernier message: 29/08/2006, 17h44

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