laopatrick
Messages postés12Date d'inscriptiondimanche 14 décembre 2008StatutMembreDernière intervention18 avril 2009
-
14 déc. 2008 à 22:40
laopatrick
Messages postés12Date d'inscriptiondimanche 14 décembre 2008StatutMembreDernière intervention18 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".
Evanok
Messages postés4Date d'inscriptiondimanche 20 janvier 2008StatutMembreDerniè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.
laopatrick
Messages postés12Date d'inscriptiondimanche 14 décembre 2008StatutMembreDernière intervention18 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...
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDerniè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.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDerniè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.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDerniè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).
laopatrick
Messages postés12Date d'inscriptiondimanche 14 décembre 2008StatutMembreDernière intervention18 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.