Aller au menu - Aller au contenu

Les chaînes de caractères

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page Précédente  1  2  3  ...  13  14  15  16  17  18  Suivante
Pseudo Commentaire
Page Précédente  1  2  3  ...  13  14  15  16  17  18  Suivante
Hors ligne MariQa14 # Posté le 10/09/2011 à 11:46:17

Annexe:
N.B: tu peux garder le printf
Hors ligne Geekizou # Posté le 11/09/2011 à 23:37:16
Tu es le css de mon xhtml
Avatar

Merci ^^ je pense que ce tuto va m'aider à trouver la reponse :) et merci à toi aussi :) Maria QADA ^^ http://www.siteduzero.com/tutoriel-3-1 [...] ecurisee.html

J'♥ =(633k)?1:0;
 
Hors ligne frei13 # Posté le 02/10/2011 à 15:49:24

hello tout le monde,

J ai essayé de faire la fonction strcpy avec ce code source. Mais ce ne marche pas. Ou est l'erreur je n arrive pas à la trouver.

Merci d avance


Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void chaineCopie ( const char* chaineRef, char* chaine2);

int main(int argc, char *argv[])
{
    char chaineRef[] = "Salut";
    char chaine2[] = "100";
 
    
 chaineCopie(chaineRef, chaine2);
    
    printf("Voici la chaineRef copiée dans la chaine copieCopie : %s", chaine2);
    
    return 0 ;
    
    
    
}

void chaineCopie ( const char* chaineRef, char* chaine2)
{
    int i = 0; // correspond à la position du caractère dans la chaîne
    
    do {
        chaine2[i] = chaineRef[i];
        
        i++;
    }while(chaineRef != '\0');
}
Hors ligne nac_iri # Posté le 05/10/2011 à 07:18:33
QUE LA LUMIERE SOIT .
Avatar

Voici une correction commentée de ton code .

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>

#include <stdlib.h>

/* Verifies le prototype de la fonction " strcpy " dans le cour.
On copie chaine2 dans chaineRef et non l'inverse.
chaine2 ne doit pas être modifiée d'où le " const char *" */

void chaineCopie ( char* chaineRef, const char* chaine2);

int main()
{
/* chaineRef doit être très grande pour contenir chaine2, 
elle est initialisée avec la chaine vide "" .*/

    char chaineRef[100] = "";

    char chaine2[] = "Salut";

    chaineCopie(chaineRef, chaine2);

// on affiche chaineRef car c'est elle qui contient la copie de chaine2

    printf("Copie de ma chaine est : %s \n", chaineRef);

    return 0;
}

// Attention au prototype de la fonction

void chaineCopie ( char* chaineRef, const char* chaine2)
{
    int i = 0;

    do {
        chaineRef[i] = chaine2[i];// on copie chaine2 dans chaineRef

        i++;
    }while(chaine2[i] != '\0');// on arrête de copier quand chaine2[i] = '\0'
}


@+ :)

Ma bible : " C Programming Language by K & R "
 
Hors ligne Shindo92 # Posté le 09/10/2011 à 22:54:32
Avatar

Études : SUPINFO Nord-Pas-de-Calais à Valenciennes

Message édité le 10/10/11 à 23h25:
J'ai déplacé ma question sur le forum, mais je n'avais pas réussi à supprimer ce commentaire.

Message original:
Secret (cliquez pour afficher)
Bonjour à tous,

J'essaie de faire moi-même la fonction "strcat" (je crée une chaine1 et une chaine2, et la fonction est censée mettre la chaine2 à la suite de la chaine1). Mais je ne comprends pas pourquoi mon programme ne fonctionne pas.

( J'aimerais qu'il m'affiche : "chaine1 vaut Salut Anthony et chaine2 vaut toujours Anthony", mais je n'ai que "chaine1 vaut Salut et chaine2 vaut toujours Anthony" ).

Voici mon code :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>

char* strcat(char* chaine1, const char* chaine2); //le prototype.

int main(int argc, char *argv[])
{
    char chaine1[100] = "Salut ", chaine2[] = "Anthony" ;

    strcat(chaine1, chaine2); //Appel de la fonction.

    printf("chaine1 vaut %s et chaine2 vaut toujours %s.\n", chaine1, chaine2);

    return 0;
}

char* strcat(char* chaine1, const char* chaine2)
{
    //pour compter le nombre de caracteres de chaine1.
    int caractereActuel = 0, nombreDeCaracteres = 0;
    do
    {
        caractereActuel = chaine1[nombreDeCaracteres];
        nombreDeCaracteres++;
    }
    while (caractereActuel != '\0');
    //on compte aussi le \0 pour pouvoir repartir d'ici.


    int j = nombreDeCaracteres;
    int i = 0;


    //on met chaine2 a la suite de chaine1.
    do
    {
        chaine1[i + j] = chaine2[i];
        i++;
    }
    while (chaine2[i] != '\0');
    chaine1[i + j] = chaine2[i];
    /* une derniere egalite apres la boucle pour mettre aussi
       le \0 de chaine2 dans chaine1. */

    return chaine1;
}



Voila, si quelqu'un pouvait m'indiquer ce qui pose problème dans mon code ce serait sympa :)

Bonne continuation.
Hors ligne nac_iri # Posté le 10/10/2011 à 22:58:39
QUE LA LUMIERE SOIT .
Avatar

Evoluer c'est mon but , par conséquent la critique est la bienvenue

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// strex.h

#ifndef H__STREX__H
#define H__STREX__H
#define MAX 1000

// Prototypes

long length(char*);

void copy(char*, char*);

void concat(char*, char*, char*);

void convertirMinusEnMAJUS(char*);


#endif

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// strex.c

#include <stdio.h>
#include <stdlib.h>
#include "strex.h"

// Longueur d'une chaine
long length(char* chaine)
{
	long compteur;

	compteur = 0;
	while(chaine[compteur] != '\0')
		compteur++;

	return compteur;
}

// Copie d'une chaine
void copy(char* chaineDest, char* chaineSrce)
{
	int indice;

	indice = 0;
	while((chaineDest[indice] = chaineSrce[indice]) != '\0')
		indice++;

	chaineDest[indice] = '\0';
}

// Concatenation de deux chaines
void concat(char* chaineOrigine, char* chaineAjoutee,char* chaineFinale)
{
	int indice;
	
        indice = 0;
        while((chaineFinale[indice] = chaineOrigine[indice]) != '\0')
		indice++;

	// Utilisation de la fonction "length" declaree ci-dessus
	while((chaineFinale[indice] = chaineAjoutee[indice - length(chaineOrigine)]) != '\0')
		indice++;

	chaineFinale[indice] = '\0';

	printf("Apres concatenation, la chaine finale est :\n\n\"%s\"\n\n",chaineFinale);

	printf("longueur(chaine finale) = %ld\n",length(chaineFinale));

}

// Convertir les miniscules en MAJUSCULES
void convertirMinusEnMAJUS(char* chaineAConvertir)
{
   int indice;

   indice = 0;
   while(chaineAConvertir[indice] != '\0')
   {
      // si c'est une minuscule
      if((chaineAConvertir[indice] >= 'a') && (chaineAConvertir[indice] <= 'z'))
         // la convertir en majuscule
         chaineAConvertir[indice] = chaineAConvertir[indice] - 'a' + 'A';
      indice++;
   }
   printf("Apres conversion en MAJUSCULE la chaine devient : \n\n\"%s\"\n\n", chaineAConvertir);
}

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// main.c

#include <stdio.h>
#include <stdlib.h>
#include "strex.h"

int main()
{
   char source[] = "Si vous avez besoin d'aide,";
   char inter[] = " le forum du site du zero est la pour ca !!";
   char dest[MAX], copie[MAX];

        printf("la chaine source est :\n\n\"%s\"", source);

	printf("longueur(chaine source) = %ld\n\n",length(source));

        printf("la chaine inter est :\n\n\"%s\"",inter);

	printf("longueur(chaine inter) = %ld\n\n",length(inter));

	copy(copie, inter);

	// Utilisation de "copie" au lieu de "inter" dans concat
	concat(source, copie, dest);

        convertirMinusEnMAJUS(dest);

   return 0;
}

#############################################################################################

L'exécution de ce programme donne :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
la chaine source est :

"Si vous avez besoin d'aide,"

longueur(chaine source) = 27

la chaine inter est :

" le forum du site du zero est la pour ca !!"

longueur(chaine inter) = 43

Apres concatenation, la chaine finale est :

"Si vous avez besoin d'aide, le forum du site du zero est la pour ca !!"

longueur(chaine finale) = 70

Apres conversion en MAJUSCULE la chaine devient :

"SI VOUS AVEZ BESOIN D'AIDE, LE FORUM DU SITE DU ZERO EST LA POUR CA !!"


@ +

Ma bible : " C Programming Language by K & R "
 
Hors ligne Shindo92 # Posté le 11/10/2011 à 00:41:14
Avatar

Études : SUPINFO Nord-Pas-de-Calais à Valenciennes

@nac_iri :


Depuis que j'ai commencé le cours de M@teo21 sur le langage C, à chaque fois que j'arrive à la fin d'un chapitre je regarde les commentaires associés.

Et à chaque fois on y retrouve des gens posant des questions sur une partie du chapitre, proposant leur code, ou demandant où sont leurs erreurs.

On y retrouve également d'autres personnes qui les aident ou proposent une correction. Tout cela dans la bonne humeur, mettant en importance l'entraide entre les gens du site.

Je sais bien que j'aurais dû poster mon précédent message (juste avant le votre*) dans le forum, mais j'ai pensé sur le coup que cet endroit était peut-être plus approprié.
Bref maintenant le problème est réglé car j'ai déplacé le message.

Puis enfin il y a vous, présent sur quasimment tous les chapitres. Vous semblez vouloir aider les autres, mais tous vos commentaires se ressemblent et se résument à : "J'ai corrigé ton code :", "J'ai amélioré ton code :", "Je poste ce programme que je viens de coder :" sans pour autant montrer à ces gens où sont leurs erreurs, ou leur donner de simples conseils. Au final, quand je lis vos commentaires, j'ai l'impression de lire "Hé, ton code n'est pas bon, jètes-le et prends le mien", ce qui ne se révèle au final pas très pédagogique.

Nous avons encore l'exemple avec votre message ci-dessus.
L'exercice proposé par m@teo21 dans ce chapitre était de recréer nous-même les différentes fonctions qu'on a pu voir sur les manipulations de chaines. Pour ce faire, il nous donnait les prototypes de chaque fonction.

Quand je lis votre message, je vois encore une fois que vous avez seulement voulu montrer aux autres que vous étiez "plus fort". Vous n'avez utilisé aucun des prototypes proposé par M@teo21 (prototypes des fonctions appartenant à "string.h") alors que l'on était censé recréer ces fonctions, donc se servir des mêmes prototypes.
Alors certes vous réussissez au final à obtenir un résultat, mais en aucun cas vous ne résolvez l'exercice proposé.

De plus vous avez "balancé" votre code sans vraiment fournir d'explication, ce qui n'est encore une fois pas très "pédagogique". (le comble, pour un site répertoriant de nombreux COURS).

<< Je poste ici un petit projet que j'étofferai au fur et à mesure: >>
Eh bien faites comme chez vous mon cher...

<< L'exécution de ce programme donne : "Si vous avez besoin d'aide, le forum du site du zero est la pour ca !!" >>
Je ne sais pas pourquoi c'est après mon commentaire que vous avez dit cela, vu que des centaines de personnes ont déja demandé de l'aide via le système de commentaires avant moi. Peut être par ce qu'officiellement je ne suis inscrit sur le site que depuis 1 ou 2 jours, qui sait.

Enfin, je tiens à vous dire que j'ai trouvé votre petite "mise en scène" plutot ridicule.

Vous avez utilisé une centaine de lignes pour dire au final d' <<Aller sur le forum !!>>, c'est vraiment pour des choses comme cela que vous "squattez" les commentaires de chapitres ?

J'aimerai vous donner un conseil: vous devriez y réfléchir à deux fois avant de poster un tel message, car n'importe qui d'autre aurait mieux à faire de sa vie, et je ne suis pas sûr que ça aide des gens de montrer à tout le monde que vous aimez "vous la péter".

Sur ce, je vous souhaite une bonne continuation dans vos travaux.

Je vous rappelle toutefois votre message, au cas où vous l'auriez édité entretemps:
Secret (cliquez pour afficher)
Je poste ici un petit projet que j'étofferai au fur et à mesure:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// strex.h

#ifndef H__STREX__H
#define H__STREX__H
#define MAX 1000

// Prototypes

long length(char*);

void copy(char*, char*);

void concat(char*, char*, char*);


#endif



Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// strex.c

#include <stdio.h>
#include <stdlib.h>
#include "strex.h"

// Longueur d'une chaine
long length(char* chaine)
{
	long compteur;

	compteur = 0;
	while(chaine[compteur] != '\0')
		compteur++;

	return compteur;
}

// Copie d'une chaine
void copy(char* chaineDest, char* chaineSrce)
{
	int indice;

	indice = 0;
	while((chaineDest[indice] = chaineSrce[indice]) != '\0')
		indice++;

	chaineDest[indice] = '\0';
}

// Concatenation de deux chaines
void concat(char* chaineOrigine, char* chaineAjoutee,char* chaineFinale)
{
	int indice;
	
        indice = 0;
        while((chaineFinale[indice] = chaineOrigine[indice]) != '\0')
		indice++;

	// Utilisation de la fonction "length" declaree ci-dessus
	while((chaineFinale[indice] = chaineAjoutee[indice - length(chaineOrigine)]) != '\0')
		indice++;

	chaineFinale[indice] = '\0';

	printf("Apres concatenation, la chaine finale est :\n\n\"%s\"\n\n",chaineFinale);

	printf("sa longueur est : %ld\n",length(chaineFinale));

}



Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// main.c

#include <stdio.h>
#include <stdlib.h>
#include "strex.h"

int main()
{
   char source[] = "Si vous avez besoin d'aide,";
   char inter[] = " le forum du site du zero est la pour ca !!";
   char dest[MAX], copie[MAX];

	printf("longueur de la chaine source = %ld\n\n",length(source));

	printf("longueur de la chaine inter = %ld\n\n",length(inter));

	copy(copie, inter);

	// Utilisation de "copie" au lieu de "inter" dans concat
	concat(source, copie, dest);

   return 0;
}



#############################################################################################

L'exécution de ce programme donne :


Code : C
1
2
3
4
5
6
7
8
9
longueur de la chaine source = 27

longueur de la chaine inter = 43

Apres concatenation, la chaine finale est :

"Si vous avez besoin d'aide, le forum du site du zero est la pour ca !!"

sa longueur est : 70




@ +

_____________________________________


Et histoire de laisser un vrai "commentaire" sur ce chapitre et ne pas être totalement hors sujet :

J'ai trouvé ce chapitre assez interessant car après tout ce temps c'est seulement maintenant qu'on voit comment demander à l'utilisateur de rentrer du texte, tache qui nous paraissait pourtant simple au tout début du cours. Mais on voit au final qu'on se sert ici d'un tas de choses apprises précédemment. J'ai également trouvé les exercices proposés très interessants (recréer les fonctions) car ils me demandent un certain temps de reflexion (peut-être parce que je débute en programmation).
Hors ligne nac_iri # Posté le 11/10/2011 à 03:27:55
QUE LA LUMIERE SOIT .
Avatar

C'est une façon de voir les choses.

Enfin bref, je viens d'ajouter une fonction à mon code.

Son utilité consiste à changer les minuscules en majuscules
.


@+

Ma bible : " C Programming Language by K & R "
 
Hors ligne nac_iri # Posté le 11/10/2011 à 13:42:51
QUE LA LUMIERE SOIT .
Avatar

La fonction STRCAT selon son prototype dans < string.h >

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdlib.h>
#define TAILLEMAXCHAINE 1000

char* concat(const char*, const char*);

int main(void)
{
   char ch1[TAILLEMAXCHAINE] = "les marsiens arrivent en force";
   char ch2[] = " sur le site du ZERO !!!";

   printf("Avant concatenation\n\n");
   
   printf("chaine1 :\t"%s\"\n\n",ch1);

   printf("chaine2 :\t\"%s\"\n\n",ch2);

   // Ajouter CH2 a la fin de CH1
   concat(ch1,ch2);

   printf("Apres concatenation\n\n");

   printf("chaine1 :\t"%s\"\n\n",ch1);

   return 0;
}

// Ajouter chaine2 a la fin de chaine1
char* concat(const char* ch1, const char* ch2)
{
   int i, j;

   for(i = 0; ch1[i] != '\0'; i++)
      ;
   for(j = 0; ch2[j] != '\0'; j++, i++)
      ch1[i] = ch2[j];

   return ch1;
}


L'exécution de ce programme donne :

Code : C
1
2
3
4
5
6
7
8
9
Avant concatenation

chaine1 :     "les marsiens arrivent en force"

chaine2 :     " sur le site du ZERO !!!"

Apres concatenation

chaine1 :     "les marsiens arrivent en force sur le site du ZERO !!!"

Ma bible : " C Programming Language by K & R "
 
Hors ligne Ankirama # Posté le 30/10/2011 à 08:34:14

Avis : Très bon

Bonjour,

Voila j'ai un problème avec la fonction rechercher un caractere, tout fonctionne bien mais quand je veux essayer de trouver le premier caractere elle me renvoie "Votre caractere n'a pas ete trouve"...
Pourriez vous m'aidez ? (ps : mon code est très mal rédigé, donc si vous souhaitez apporter des améliorations faites le en m'expliquant si possible :) )

voici le code : Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void rechercherCaractere(const char* chaine, char caractereARechercher)
{
    int place = 0, i = 0;
    char caractereActuel = 0;
    char chaine2[100];
    int a = 0;

    do
    {
        caractereActuel = chaine[i];
        if(caractereActuel == caractereARechercher)
        {
            place = i;
            i++;
        }
        else
            i++;
    }while(caractereActuel != '\0' && caractereActuel != caractereARechercher);

    if(place != 0)
    {
        printf("\nVotre caractere a ete trouve a la %deme place\n", place);
        do
        {
            chaine2[a] = chaine[place];
            a++;
            place++;
        }while(chaine[place] != '\0');
        printf("Et la suite de la chaine est : %s", chaine2);
    }
    else
        printf("\nVotre caractere n'a pas ete trouve.\n");
}
Hors ligne Masterpouya # Posté le 31/10/2011 à 01:05:46

Avis : Très bon

Bonsoir ! Merci pour ce super tuto super bien réalisé et merci aussi à tout les lecteurs qui apportent leur aide sur les forums et dans les commentaires !

J'aimerais juste faire une petite remarque :
Serait-il possible de parler des "cast" ?
=> Il me semble nécessaire pour réaliser la fonction "strchr" (entre autres) avec le prototype donnée (le const char*).

En tout cas pour ma part il m'a fallu plusieurs heures de lecture du forum pour résoudre le problème du : assignment discards qualifiers from pointeur target type


Si quelqu'un à une solution à proposer pour éviter le cast et en gardant le "CONST" du protoype, je veux bien voir ;D
Si ce n'est pas possible, il serait bien de le mentionner dans le tuto pour éviter que d'autres personnes ne buttent sur ce problème ! ^^
A bon entendeur !
Salut !

PS : Pardon pour ne pas avoir lu les 460 commentaires qui précèdent, peut-être que la réponse au problème s'y trouve mais c'est trooooooooop long à lire !! :-°
Hors ligne nac_iri # Posté le 04/11/2011 à 18:36:58
QUE LA LUMIERE SOIT .
Avatar

Fonction rechercher un caractère dans une chaine :

conseil :

pour le choix de variables, faut se poser la question suivante :
qu'est ce que je veux faire, ou qu'est ce que ma fonction doit faire ?

Dans ce cas précis de la recherche d'un caractère dans une chaine il me faut quoi alors:
d'abord une chaine et le caractère à rechercher n'est ce pas !!
comme ma chaine constitue un tableau de char alors il faut un indice pour le parcourir et un caractère pour récupérer chaque élément du tableau pour effectuer les comparaisons.
en tout j'ai besoin de quatre variables.
je propose une manière de coder cette fonction :

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
void rechercherCaractere(const char*, char);

void main(void){
	
	static char s[] = "abracadabra";
	char car;

	printf("entrez le caractere a rechercher : ");
	scanf("%c", &car);

	rechercherCaractere(s,car);

	printf("\n");
}
void rechercherCaractere(const char* chaine, char caractereARechercher)
{
    int i = 0;
    char caractereActuel = 0;

    do
    {
        caractereActuel = chaine[i];
		if(caractereActuel == caractereARechercher)
			do{
			printf("%c",chaine[i]);
			i++;
		}while(chaine[i] != '\0');
		else
			i++;

    }while(caractereActuel != '\0' && caractereActuel != caractereARechercher);

	if(caractereActuel == '\0')
		printf("le caractere que vous cherchez n'existe pas");
}


NB:
avec les pointeurs, la fonction rechercher caractère dans une chaine est plus efficace et moins longue.
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
char *chercherDansChaine(char *s, char c){
	char *p = s;
	
	while(*p != c && *p != '\0')
		++p;
	if(*p == c)
		return p;
	else
		return 0;
}

Ma bible : " C Programming Language by K & R "
 
Hors ligne Krice # Posté le 05/11/2011 à 16:29:21

Salut les Zéro! super site!
Quelqu'un peut m'aider?
J'ai une erreur à la ligne 11 que je ne comprend pas:
Line 11- error: assignment of read-only location '*(chaine + (unsigned int)i)'

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>

char* strchr(const char* chaine, int caractereARechercher)
{
    int i;

    for(i=0;chaine[i]!=caractereARechercher;i++)
    {
       if(chaine[i]='\0') return NULL;
    }

    return chaine[i];
}
Hors ligne Masterpouya # Posté le 07/11/2011 à 18:36:33

Avis : Très bon

Salut Krice ! Tu as commis 2 erreurs :
1) dans le if il faut 2 égal ! Sinon, c'est une attribution de valeur que tu fais, pas une comparaison ;D
Code : C
1
if(chaine[i]=='\0')


2)Ton second return est un caractère (une valeur) or tu dois renvoyer une chaine de caracteres (un pointeur sur le 1er caractere) ;D
Code : C
1
return chaine[i];
Hors ligne drMigg # Posté le 21/11/2011 à 18:27:06
Avatar

Avis : Très bon

salut j'aimerais bien que frei13 me dise si il a reussi a faire fonctionner sa fonction de copie de chaine.. j'ai exactement la meme que lui et la mienne marche... j'ai copier coller la sienne et ca marche pas! o_O je comprend vraiment pas.. j'ai deja essayer de lui envoyer un mesage mais ca ne marche pas(non plus..) ou alors j'ai pas trouver.. faut dire que des fois c'est tortueux ca tien a pas grand chose ca rend fou mais ca fait plaisir quand on trouve tout seul.. enfin tout seul... :p des fois juste en voulant poster le probleme la reponse apparait. perseverance les gars !! :)
Hors ligne blakswan # Posté le 02/12/2011 à 14:45:28

Salut à tous !
Je suis en train de devenir fou o_O .
Pour strcpy, qui semble pourtant évident, j'ai rédigé ceci :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char* strcpy(const char* chaineACopier, char* copie);

int main()
{
char chaineACopier[]="hakim";
char copie[100]={0};

strcpy(chaineACopier,copie);

return 0;
}

char* strcpy(const char* chaineACopier, char* copie)

{ int i,taille;

taille=strlen(chaineACopier);

printf("%d",taille);

for (i=0;i<=taille;i++)
{
copie[i]=chaineACopier[i];
}

return copie;
}

Le compilateur me renvoie un conflicting types for 'strcpy' au niveau du prototype.
Si quelqu'un pouvait m'expliquer, je lui en serais ultra-reconnaissant.
Hors ligne blakswan # Posté le 02/12/2011 à 17:26:57

Je me réponds à moi-même. J'ai compris mon erreur. plus de pb.
Hors ligne onepiece69 # Posté le 03/12/2011 à 00:36:28

Avis : Mitigé

Bonjour à tous, je ne comprend pas pourquoi ma fonction pour strcat ne marche pas quelqu'un pourrait m'aider svp :) Je précise juste que je n'ai pas mit les directives de préprocesseurs etc ... mais j'ai bien pensée a tout inclure j'en suis sur ;) Voici mon code :
Fonction.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int strlong(const char* chaine)
{
    int CaractereEnCours, NbDeCaractere;

      do
    {
        CaractereEnCours = chaine[NbDeCaractere];
        NbDeCaractere++;
    }
    while(CaractereEnCours != '\0' );

NbDeCaractere--;

    return NbDeCaractere;
}

char* cat (char *chaine1, const char* chaine2)
{
    int i=0,j=0, taille1=strlong(chaine1),taille2=strlong(chaine2);
    for (i=0;i<taille1+1;i++)
    {
        if (chaine1[i] == '\0')
        {
            chaine1[i] = chaine2[j];
        }
    }
    for (j=1;j<taille2+1;j++)
    {
        i++;
        chaine1[i]=chaine2[j];
    }
    return 0;
}

Fonction.h
Secret (cliquez pour afficher)
Code : C
1
2
int strlong (const char *chaine);
char* cat(char* chaine1, const char* chaine2);


Main.c
Secret (cliquez pour afficher)
Code : C
1
2
3
4
5
6
7
int main(int argc, char *argv[])
{
    char chaine1[]="Salut", chaine2[]="gamin";
    cat(chaine1,chaine2);
    printf("chaine1 = %s\nchaine2 = %s", chaine1, chaine2);
	return 0;
}
Hors ligne hastaris # Posté le 03/12/2011 à 23:41:25
Avatar

Bonjours,
quelqun pourrait il m'expliquer ce qui ne va pas avec ce code , il en va de la survie de mon ordi :D :D :D ... je commence a craquer :'(
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include <string.h>


int main(int argc, char *argv[])
{
Personne utilisateur;

printf("Quel est votre nom ? ");
scanf("%s", utilisateur.nom);
printf("Votre prenom ? ");
scanf("%s", utilisateur.prenom);
printf("Quel est votre age ?");
scanf("%d" , &utilisateur.age );
if (utilisateur.age<18)
{
printf("Vous vous appelez %s %s et vous avez %d ans : vous etes donc %s ", utilisateur.prenom, utilisateur.nom , utilisateur.age , utilisateur.minorite);
}
else
{
printf("Vous vous appelez %s %s et vous avez %d ans : vous etes donc %s ", utilisateur.prenom, utilisateur.nom , utilisateur.age , utilisateur.majorite);
}


return 0;
}
---------------------------------------------------------------
typedef struct Personne Personne;
struct Personne
{

char nom[100];
char prenom[100];
int age ;
char minorite [] = "mineur" ;
char majorite [] = "majeur" ;

};


merci beaucoup d'avance :)



Qui ne tente rien n'a rien :p
 
Hors ligne Noddy # Posté le 10/12/2011 à 14:23:27

Avis : Très bon

Bonjour,

Mon code fait planter la console pour dire que c'est faut :

Voila le main
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
char* rechTer(const char *chaine1, const char *chaine2);

int main()
{
    char mots[100] = "Coucou", chaine[100] = {0}, chaine1[100] = "Sucre <3", *chaineRecherche = NULL;
    int taille = 0, vrai = 0;

    taille = compteur(mots);
    copieChaine(chaine , mots);

    printf("La chaine dit : %s\n\n", mots);
    printf("La chaine meusure : %d cases\n\n", taille);
    printf("La copie dit : %s\n\n", chaine);

    vrai = compare(mots, chaine);
    if(vrai == 0)
        printf("Les chaines sont identiques.\n\n");
    else
        printf("Les chaines sont differentes\n\n");

    concact(chaine, chaine1);
    printf("La chaine dit : %s\n\n", chaine);

     vrai = compare(mots, chaine);
    if(vrai == 0)
        printf("Les chaines sont identiques.\n\n");
    else
        printf("Les chaines sont differentes\n\n");

    chaineRecherche = rech(chaine, 'u');
    if(chaineRecherche != NULL)
        printf("Voici la chaine a partir de la premiere lettre 'u' : %s\n\n", chaineRecherche);
    else
        printf("Desole, il n'y a aucun caractere dans la chaine.\n\n");

        chaineRecherche = rechVar(chaine, 'u');
    if(chaineRecherche != NULL)
        printf("Voici la chaine a partir de la derniere lettre 'u' : %s\n\n", chaineRecherche);
    else
        printf("Desole, il n'y a aucun caractere dans la chaine.\n\n");

        chaineRecherche = rechBis(chaine, "Sru");
    if(chaineRecherche != NULL)
        printf("Voici la chaine a partir de la premiere lettre parmis 'Sru : %s\n\n", chaineRecherche);
    else
        printf("Desole, il n'y a aucun caractere dans la chaine. \n\n");

    chaineRecherche = rechTer(chaine, "Sacre");
    if(chaineRecherche != NULL)
        printf("Voici la chaine a partir du premier mot 'Sucre' : %s\n\n", chaineRecherche);
    else
        printf("Desole, il n'y a aucun mot dans la chaine.\n\n");

    return 0;


Et voila le code de la fonction
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
char* rechTer(const char *chaine1, const char *chaine2)
{
    int i = 0, j = 0, h = 0, b = 0, k = 0;

    h = compteur(chaine2);

    while(chaine1[i] != '\0' || b != h)
    {
        if(chaine1[i] == chaine2[j])
        {
            j++;
            b++;
        }
        else if(chaine1[i - 1] == chaine2[j - 1] && chaine1[i] != chaine2[j] && b != h)
        {
            b = 0;
            j = 0;
        }
        else if(b != h && chaine1[i] != chaine2[j])
            b = 0;
        else
            j = 0;

        i++;
    }

    i = 0;

    if(b == h)
    {
        while(k == 0 || chaine1[i] != '\0')
        {
            if(chaine1[i] == chaine2[0])
            {
                k = 1;
                return &chaine1[i];
            }
            else
                i++;
        }
    }
    else
        return NULL;

}


Merci les zéros !

Code : Console
Le monde est un poireau que les ordinateurs domineront !!
 
Hors ligne churchill # Posté le 21/12/2011 à 14:30:41
Total annihilation forever !
Avatar

Avis : Très bon

Bonjour à tous.

Voilà mon code pour les premières fonctions (strlen, strcpy, strcat et strcmp),
pouvez-vous me dire s'il est correct (pas de dépassement de mémoire) ?

Merci d'avance.

chaines.c
Secret (cliquez pour afficher)

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include "chaines.h"

int longueur(const char *chaine)
{
    int nbCaracteres = 0;
    char caractere = 0;

    do
    {
        caractere = chaine[nbCaracteres];
        nbCaracteres++;
    }while(caractere != '\0');

    return --nbCaracteres;  // On ne compte pas le '\0'
}

char* copie(char *copie, const char *chaineACopier)
{
    int i;

    for(i = 0; chaineACopier[i] != '\0'; i++)
    {
        copie[i] = chaineACopier[i];
    }
    copie[i + 1] = '\0';

    return copie;
}

char* concat(char *chaine1, const char *chaine2)
{
    int actuel1 = longueur(chaine1);  // Pour parcourir chaine1 a partir du '\0'
    int actuel2 = 0;    // Pour parcourir chaine2

    do
    {
        chaine1[actuel1] = chaine2[actuel2];
        actuel1++;
        actuel2++;
    }while(chaine2[actuel2] != '\0');

    chaine1[actuel1] = '\0';

    return chaine1;
}

int compare(const char *chaine1, const char *chaine2)
{
    int i = 0;

    do
    {
        if (chaine1[i] != chaine2[i])
            return 1;   // Les chaînes sont différentes

        i++;
    }while(chaine1[i] != '\0' && chaine2[i] != '\0');

    if(chaine1[i] == '\0' && chaine2[i] == '\0')
        return 0;   // Les chaînes sont identiques
    else
        return 1;   // Les chaînes sont différentes
}



chaines.h
Secret (cliquez pour afficher)
Code : C
1
2
3
4
5
6
7
8
9
#ifndef CHAINES_H_INCLUDED
#define CHAINES_H_INCLUDED

int longueur(const char *chaine);
char* copie(char *copie, const char *chaineACopier);
char* concat(char *chaine1, const char *chaine2);
int compare(const char *chaine1, const char *chaine2);

#endif // CHAINES_H_INCLUDED


main.c
Secret (cliquez pour afficher)
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
#include "chaines.h"

int main()
{
    char chaine1[20] = "Salut ", chaine2[] = "Antoine.";
    char chaineCopie[20] = "";

    printf("La chaine %s a pour longueur : %d\n\n", chaine1, longueur(chaine1));

    concat(chaine1, chaine2);
    printf("chaine1 vaut maintenant : %s\n\n", chaine1);

    copie(chaineCopie, chaine1);
    printf("chaineCopie vaut maintenant : %s\n\n", chaineCopie);

    if (compare(chaine1, chaineCopie) == 0)
        printf("Les chaines sont identiques\n\n");
    else
        printf("Les chaines sont differentes\n\n");

    return 0;
}
Hors ligne paul161 # Posté le 29/12/2011 à 15:56:59
Cogito, ergo sum
Avatar

Avis : Très bon

Ville : La rochefoucauld
Pays : France métropolitaine

Personnellement, je suis arrivé à quelquechose de beaucoup plus concis pour reproduire la fonction strlen :
Code : C
1
2
3
4
5
6
7
8
int longueurChaine(const char chaine[])
{
    int i = 0;

    for (i = 0 ; chaine[i] != '\0' ; i++);

    return i;
}


Je ne cherchais même pas à faire un code court, mais je l'ai fait sans regarder le modèle, et j'avoue que je suis étonné de la part de Matheo21 d'avoir fait une aussi grosse usine à gaz :waw:

PS: Pour info on peut faire des boucles vides, comme j'ai fait avec mon "for", simplement en mettant un point-virgule (des accolades sans rien entre marchent aussi, mais c'est moins court).

AMD Phenom II X6 1055T, ATi Radeon HD 6950 2 Go GDDR5, 4 Go DDR3-1600, carte mère ASRock 890GX Pro3
 
Hors ligne ambroz # Posté le 15/01/2012 à 16:53:52


Bonjour à tous, :D

Je suis entrain de réaliser la fonction strchr mais je rencontre un problème:

main.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdio.h"
#include "stdlib.h"
#include "stringfunctions.h"



int main(int argc,char *argv)
{
	
	char str1[50]= "", *endstr = NULL,character='u';

	printf("Entre la chaine:");
	scanf("%s",str1);
	

	endstr = mystrchr(str1,character);
	
	printf("\n\nString a partir de la lettre:\n\n %s",endstr);

	return 0;
}


stringfunctions.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
char* mystrchr (char const *str1,char character)// salut  u ut
{
	int i = 0,j=0;
	char endstrf[1000]="";

	while(str1[i] != character)
	{
		i++;
	}

	do
	{
		endstrf[j]=str1[i];
		++j;
		++i;
	}while(str1[i] != '\0');

	


	return endstrf;
}


Ce code marche mais dès que je veux initialiser le caractère avec scanf j'ai ce message d'erreur et le programme plante quand j'utilise scanf:
" 1>c:\users\hugo\programmes\c\cours du zero\partie ii\4) mystringfunctions\main.c(13): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304) : voir la déclaration de 'scanf'
1>c:\users\hugo\programmes\c\cours du zero\partie ii\4) mystringfunctions\main.c(15): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(304) : voir la déclaration de 'scanf' "

avec ce main.c
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "stdio.h"
#include "stdlib.h"
#include "stringfunctions.h"



int main(int argc,char *argv)
{
	
	char str1[50]= "", *endstr = NULL,character;

	printf("Entre la chaine:");
	scanf("%s",str1);
	printf("\n\nEntre le caractere");
	scanf("%c",&character);
	

	endstr = mystrchr(str1,character);
	
	printf("\n\nString a partir de la lettre:\n\n %s",endstr);

	return 0;
}


Merci d'essayer de m'aider :)

P.S. J'utilise Visual C++



Hors ligne pokmako # Posté le 23/01/2012 à 18:18:54

Avis : Très bon

Salut j'ai un petit problème avec mon code.
choix == 1 fonctionne très bien, les données sont parfaitement copiées dans Annuaire.txt. par contre, quand je fais une recherche il me dit bien d'entrer les noms collés.... mais après, retour direct à zéro sans résultat! je pense qu'il y a un problème avec mon strstr mais quelqu'un pourrait-il m'aider, pour aider je mets mes headers à la fin (enfin mon header ^^)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{int choix = 0;
char *suiteChaine;
char texte[40]={""};
system("color 0b");
printf("*****ANNUAIRE*****\n");
printf("\n1.Entrer un nouveau nom.\n");
printf("2.Rechercher quelqu'un.\n\n");
scanf("%d", &choix);

if (choix == 1)
{
FILE* fichier = NULL;
char nom[20]={""}, prenom[20]={""};
int numero = 0;
char nome[20]={""}, prenome[20]={""};
int numeroe = 0;
char nomee[20]={""}, prenomee[20]={""};
int numeroee = 0;
char nomeee[20]={""}, prenomeee[20]={""};
int numeroeee = 0;
char nomeeee[20]={""}, prenomeeee[20]={""};
int numeroeeee = 0;
char nomeeeee[20]={""}, prenomeeeee[20]={""};
int numeroeeeee = 0;

fichier = fopen("Annuaire.txt", "r+");

if (fichier != NULL)
{
printf("\n\nNOM : ");
scanf("%s", nom);
fprintf(fichier, "%s", nom);

printf("\nPRENOM : ");
scanf("%s", prenom);
fprintf(fichier, "%s", prenom);

printf("\nNUMERO : ");
scanf("%d", &numero);
fprintf(fichier, "%d", numero);
fprintf(fichier, "\n\n");

printf("\n\nNOM : ");
scanf("%s", nome);
fprintf(fichier, "%s", nome);

printf("\nPRENOM : ");
scanf("%s", prenome);
fprintf(fichier, "%s", prenome);

printf("\nNUMERO : ");
scanf("%d", &numeroe);
fprintf(fichier, "%d", numeroe);
fprintf(fichier, "\n\n");

printf("\n\nNOM : ");
scanf("%s", nomee);
fprintf(fichier, "%s", nomee);

printf("\nPRENOM : ");
scanf("%s", prenomee);
fprintf(fichier, "%s", prenomee);

printf("\nNUMERO : ");
scanf("%d", &numeroee);
fprintf(fichier, "%d", numeroee);
fprintf(fichier, "\n\n");

printf("\n\nNOM : ");
scanf("%s", nomeeeee);
fprintf(fichier, "%s", nomeeeee);

printf("\nPRENOM : ");
scanf("%s", prenomeeeee);
fprintf(fichier, "%s", prenomeeeee);

printf("\nNUMERO : ");
scanf("%d", &numeroeeeee);
fprintf(fichier, "%d", numeroeeeee);
fprintf(fichier, "\n\n");

printf("\n\nNOM : ");
scanf("%s", nomeee);
fprintf(fichier, "%s", nomeee);

printf("\nPRENOM : ");
scanf("%s", prenomeee);
fprintf(fichier, "%s", prenomeee);

printf("\nNUMERO : ");
scanf("%d", &numeroeee);
fprintf(fichier, "%d", numeroeee);
fprintf(fichier, "\n\n");

printf("\n\nNOM : ");
scanf("%s", nomeeee);
fprintf(fichier, "%s", nomeeee);

printf("\nPRENOM : ");
scanf("%s", prenomeeee);
fprintf(fichier, "%s", prenomeeee);

printf("\nNUMERO : ");
scanf("%d", &numeroeeee);
fprintf(fichier, "%d", numeroeeee);

fclose(fichier);

}
}
else if (choix == 2)
{
FILE* fichier = NULL;
fichier = fopen("Annuaire.txt", "r+");
printf("Entrez les noms et prenoms colles, avec les majuscules : ");
scanf("%s", texte);
suiteChaine = strstr("Annuaire", "%s"), texte;
if (suiteChaine != NULL)
{
printf("Resultats de la recherche : %s", suiteChaine);

}

fclose(fichier);
}
return 0;
}


header:

FILE* fopen(const char* nomDuFichier, const char* modeOuverture);
char* fgets(char* chaine, int nombreDeCaracteresALire, FILE* pointeurSurFichier);
char* strstr(const char* chaine, const char* chaineARechercher);
Hors ligne Myrmi # Posté le 13/02/2012 à 18:56:22

Bonjour à tous!
Juste une petite info additionnelle que j'ai trouvé dans un bouquin, sur l'utilisation de la fonction strcpy: on peut s'en servir pour modifier une chaîne de caractère:
Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int main()
{
    char string[]="Hello world!\n";

    printf("%s",string);
    strcpy(string,"Bonjour");
    printf("%s",string);

    return 0;
}



Donc on peut "initialiser" une chaîne qu'on aurait "oublié":
Code : C
1
2
3
4
5
6
7
8
9
int main()
{
    char string[100];

    strcpy(string,"Hello world!\n");
    printf("%s",string);

    return 0;
}


Et pour finir, les chaînes de caractères étant des tableaux, et la première variable envoyée à la fonction étant le pointeur de la position initiale du tableau, on peut donc modifier le milieu d'une chaîne:

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int main()
{
    char string[100];

    strcpy(string,""Hello world!\n");
    printf("%s",string);
    strcpy(string+2,"y you!\n");
    printf("%s",string);

    return 0;
}


Voilà voilà, après je ne sais pas l'utilité de pouvoir faire ça pour l'instant... Je ne suis qu'un zéro qui a tenu jusqu'ici!!
Allez, je retourne à faire ces fonctions moi même donc!
Hors ligne Nevo # Posté le 16/02/2012 à 05:10:27

Bonjour à tous,

Désolé si mon problème a déjà été posté, j'ai fait une recherche sur les 5 premières pages et la dernière, j'ai eu la flemme de toute les parcourir :p

En fait, lorsque j'implémante ma version "maison" de strconcat, ma compilation et mon programme s'exécute bien, mais je n'obtient pas le résultat escompté : en gros ma chaine à concaténer n'est pas modifiée.

Voici le code de mon programme, si vous pouviez m'aider à comprendre, ça m'aiderait beaucoup.

Bonne soire à vous !

Code : C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char* strcatbis(char* chaineConcatenee, const char* chaineAConcatener);

	char chaine1[] = "Coucoucouuuuuuu";
	char chaine2[100] = "C'est moi";

	printf("%s\n", chaine1);
	printf("%s\n", strcatbis(chaine2, chaine1));

    return 0;
}

char* strcatbis(char* chaineConcatenee, const char* chaineAConcatener){

	int i;

	for (i=(strlen(chaineConcatenee)+1) ; i<(strlen(chaineConcatenee)+2+strlen(chaineAConcatener)) ; i++){
		chaineConcatenee[i] = chaineAConcatener[(i-1-strlen(chaineConcatenee))];
	}

	return chaineConcatenee;

}
Hors ligne Ghost_anon # Posté le 17/02/2012 à 11:48:33
Avatar

Avis : Très bon

Salut

Encore et toujours, aussi limpide tes cours M@teo 21

merci encore, bien plus facile à comprendre que les deux derniers chapitres d'ailleurs.

ou bien ,c'est peut-être justement grâce à eux, que ça paraît simple :p

bon, allez!! c'est parti pour les exercices :)
Hors ligne Archseven # Posté le 18/02/2012 à 23:01:56

Avis : Très bon

bonjour !

est ce que quelqu'un pourrait me dire pourquoi mon code ne fonctionne pas ?
c'est pour l'exercice de réécriture de la fonction strcpy :


#include <stdio.h>
#include <stdlib.h>

char copierChaine( char* copieChaine,char* chaineOriginale);

int main( int argc, char *argv[])
{

char chaine1[]="Salut", chaine2[30]={0};

copierChaine(chaine2,chaine1);

printf("la copie de la chaine est la suivante : %s",chaine2);

return 0;
}

char copierChaine(char* copieChaine,char* chaineOriginale)
{
int nombreDeCaracteres = 0;
char caractereActuel = 0;
caractereActuel=copieChaine[nombreDeCaracteres];
do
{
copieChaine[nombreDeCaracteres]=chaineOriginale[nombreDeCaracteres];
nombreDeCaracteres++;
}
while(caractereActuel != '\0');
return copieChaine;
}

je voulais utiliser un "do while" pour changer de la correction publiée est ce que ca peut marcher ?
le code me retourne la premiere lettre seulement de la chaine originale...

Merci de m'aider
Hors ligne Mrkifkif # Posté le 19/02/2012 à 13:36:54

Avis : Très bon

Archseven :

ta fonction est fausse car tu fais : caractereActuel = copiechaine[nombredecaracteres]
tu devrais faire : caractere actuel = chaineoriginale[nombredecaracteres]
et l'inclure dans le do... while (car là, si ta copie est initialisée à 0, ta variable caractere sera toujours égale à 0)
ensuite : ta fonction est trop complexe pour rien ! voici la mienne, qui marche :
void copiechaine(char *chacopier, char *chcopie)
{
int i =0;
for(i=0; i < strlen(chacopier); i++)
{
chcopie[i] = chacopier[i];
}
}
Hors ligne Mrkifkif # Posté le 19/02/2012 à 14:15:49

Avis : Très bon

et pour ceux qui galèrent avec la fonction strcat, j'ai trouvé ça (j'ai rajouté une condition qui ajoute un espace entre les 2 chaines s'il n'y en a pas) :



void concchaine(char chaine[], char *chaine2)
{
int endroitespace = strlen(chaine);
int i=0;
char caractact;
if (chaine[endroitespace] != ' ')
{
chaine[endroitespace] =' ';
chaine[endroitespace+1] = '\0';
}
while(caractact!='\0')
{
caractact = chaine2[i];
chaine[endroitespace+1+i]=chaine2[i];
i++;
}
}
Pour accéder à cette section
Connectez-vous !
connexion_rpx