Sujet

laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009 - 14 déc. 2008 à 22:40
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009 - 23 déc. 2008 à 22:27
Bonjour,

Je vous expose le problème : "Créer une fonction prenant en argument une chaîne de caractères et un nombre n, et qui renvoi une chaîne de caractère qui est un sous-mot correspondant aux n premieres lettres de la chaine de caracteres passées en arguments".

Donnez moi une solution, je suis qu'un débutant.

15 réponses

Evanok Messages postés 4 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 5 juillet 2010
14 déc. 2008 à 23:45
Si on parle bien de langage C c'est très simple, une chaine de caractère est comme un tableau, il suffit que tu parcours ton tableau jusqu'a la lettre n-1 a l'aide d'une boucle for ( le tableau représentant une chaine de caractère étant indexé a 0 je suppose ) et remplissent un nouveau tableau pour constituer le nouveau mot.

Regarde n'importe quel tutorial sur les chaines de caractère en C, je vais pas te mettre le code non plus ça serai vraiment trop facile héhé, tu vas voir c'est très simple.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 déc. 2008 à 12:45
strncpy(); ou strcat();



Cordialement, uaip.
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
15 déc. 2008 à 22:36
La lettre n-1 ?
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 déc. 2008 à 22:52
Un tableau commence à l'indice 0. Et de 0 à 9, par exemple, il y a 10 chiffres, soit 9 = 10-1 (dernier_chiffre = nbr_chiffres - 1)

Cordialement, uaip.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
15 déc. 2008 à 23:01
ah ! d'accord.

Et je vois pas comment copier un à un des caractères d'un tableau à un autre sans tous les copier... comment ki font, sont trop fort !
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
15 déc. 2008 à 23:28
En faite, je comprends pas comment on peut faire une boucle sur deux fonctions si on doit créer une fonction autre que le main et copier n caractère d'une chaîne de caractère, enfin je sais pas si je me fais comprendre...
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 déc. 2008 à 23:28
Je t'ai laissé un lien, mais apparemment tu n'es pas allé voir.

Sinon pour ta question : si ton prof te demande d'écrire une fonction, alors tu as déjà du voir les boucles et les tableaux de char.
Par exemple :
char mot1[]= "Salut" ;
/* Est identique à : */
char mot[6];
mot[0] ='S'; mot[1]= 'a' ; mot[2] ='l'; mot[3]= 'u' ; mot[4] ='t'; mot[5]='\0';/* Ce dernier étant le caractère de fin de chaine */
/* Pour preuve : */
strcmp(mot1,mot);/* Retournera 0 */

D'ailleurs, là on comprend bien le "lettre-1" (6 lettres et pourtant le dernier élément du tableau a pour indice 5).
Bon, tu as tout là, suffit de mettre ça dans une boucle et le tour est joué (désolé Evanok d'avoir éclairci un peu le mystère ^^)
C'est en faisant des tests que tu comprendras.

Cordialement, uaip.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 déc. 2008 à 23:34
Dernier indice (exemple de boucle dans une fonction autre que le main) :
#include <stdio.h>
void fonction() {
    int a;
    for(a=0;a < 5;a++) {
        printf("Valeur de a : %d\n",a);
    }
}
int main() {
    fonction();
    return0;
}

Allez zou tu as tout là. C'est beaucoup trop facile, maintenant.

Cordialement, uaip.
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
15 déc. 2008 à 23:46
g pas de prof, c mon ti frer ki me lance un défi !

Et je suis comptable ; pour ton lien, je suis allé voir, mais je viens de faire mes premiers pas en programmation ya depuis avant hier maxi.

Merci, je vais essayer de comprendre, ya pad raison que je ne réussisse pas :-).

Avec ma sincère reconnaissance,
++
0
Evanok Messages postés 4 Date d'inscription dimanche 20 janvier 2008 Statut Membre Dernière intervention 5 juillet 2010
16 déc. 2008 à 00:00
Pas de raison d'être désolé héhé tu expliques très bien tu as raison d'éclaircir les points qui ne le sont pas
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
16 déc. 2008 à 23:23
^^ ok merci, t très gentil, en tout cas si je peux t'aider, bah je le ferais sans condition et aussi longtemps que je pourrais. ++
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
22 déc. 2008 à 23:49
re !,

Bah écoutes, j'osais pas te le demander mais j'ai bo chercher ché plus comment faire.

J'ai essayé de retourner le problème dans tous les sens, snif...

Ca serait très gentil si tu pourrais me conseiller une correction stp !!! je ve pas etre bloquer par ca.

Merci merci merci beaucoup d'avance ......
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
23 déc. 2008 à 01:57
Tu ne sais plus comment faire ? Donc avant tu savais ? Or tu as dit ne jamais avoir fait de prog... Bizarre ton histoire
Concernant les corrections, en voici 2 :
1) Avec la boucle (valeur renvoyée par le paramètre de sortie)
char Chaine(char* text,char* result,int nbr) {
    //Si le nombre de lettre à renvoyer est plus grand que le nombre de lettres du mot de départ,
    //on retourne 0 et le mot est copié tel quel
    if (nbr > strlen(text)) {
        result=text;
        return 0;
    }
    //Sinon on copie lettre par lettre
    int a;
    for(a=0;a < nbr;a++) {
        result[a]=text[a];
    }
    //Tout s'est bien passé, on retourne 1
    return 1;
}
//Appel de la fonction
int main() {
    char chaine[]="azerty"; //Chaine de départ
    char chaine2[50]={0}; //Chaine de résultat
    int result=Chaine(chaine,chaine2,4); //Exemple d'appel avec 4 lettres à copier
    if (result) printf("Valeur : %s\n",chaine2); //Affichage
    return 0;
}

2) Simplement avec strncpy()
int main() {
    char chaine[]="azerty"; //Chaine de départ

    char chaine2[50]={0}; //Chaine de résultat
    strncpy(chaine2,chaine,3); //Exemple d'appel avec 3 lettres à copier
    printf("Valeur : %s\n",chaine2); //Affichage
    return 0;
}

J'ai pas rajouté les caractères de fin de chaine ('\0'), tu peux le faire par sécurité.
Personnellement, je préfère la deuxième méthode (fonction de la bibliothèque, donc plutôt blindée).

Cordialement, uaip.
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
23 déc. 2008 à 01:59
Oups, le int verif devient char verif, et on gagne 3 octets

Cordialement, uaip.
0
laopatrick Messages postés 12 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 18 avril 2009
23 déc. 2008 à 22:27
^^, sur le coup kan je t écris, g t surement tre fatigué, mais la vérité, je m'y suis mis que ya kelke jours. en tout cas, je vais essayer de comprendre tout ca, c pas évident ^^.

si t'as besoin d'un truc en compta, fais moi signe, j'en suis un expert.

encore merci, ++.
0
Rejoignez-nous