Post new topic Reply to topic  [ 7 posts ] 
Author Message
 Post subject: Exercices C
PostPosted: 30 Jan 2011, 23:53 
Modérateur Section
User avatar

Joined: 31 Mar 2009, 18:04
Posts: 177
Location: 90n86w
Voila comme promis, une petite série d'exercices. J;ai essaye d'organiser ça au maximum pour que ce soit progressif.
Si vous voulez en rajouter, demandez moi un account.

Amicalement.

Ca se passe ici (click me)

[up] Malheureusemment les donnees sont perdues, merci a 000webhost ...


Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 15 Mar 2011, 16:42 
Membre
User avatar

Joined: 20 Sep 2010, 16:45
Posts: 27
Location: France
Yop all,
Bon je débute en C :)
Et ces exos m'ont pour l'instant bien fait progresser^^
J'ai commencé aujourd'hui et j'en suis arrivé à l'exercice 6(recoder memset() )
Je me permet de partager mes sources afin que vous me disiez si c'est correct.
J'éditerais au fur et à mesure pour rajouter les sources.
Voilà ce que j'ai sur moi (les autre je lai ai at home et la fl*mme de les recoder tout de suite je dois y aller ^^) :
int my_strlen(char* s){
int nbdechar=0;
char i=1;
while(i!='\0'){
i=s[nbdechar];
nbdechar++;
}
nbdechar--;
return nbdechar;
}
char *my_strcpy(char *dest, char *src){
int i=0;
int len=my_strlen(src);
while(i<len){
dest[i]=src[i];
i++;
}
return dest;
}
char *my_strncpy(char *dest, char *src, unsigned int n){
int i=0;
while(i<n){
dest[i]=src[i];
i++;
}
return dest;
}

Voilà :)
Si jamais j'ai besoin d'aide puis-je demander ici?
++
Grimm


Last edited by grimmjowbo on 26 Apr 2011, 18:02, edited 1 time in total.

Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 17 Mar 2011, 22:39 
Modérateur Section
User avatar

Joined: 31 Mar 2009, 18:04
Posts: 177
Location: 90n86w
Oui tu peux poster ici, comme vous tous d'ailleurs.

Sinon j’avoue ne pas comprendre le pourquoi du comment de ta façon de coder my_strlen

int my_strlen(char* s){
int nbdechar=0;
char i=1;
while(i!='\0'){
i=s[nbdechar]; /* a quoi ça te sers d'assigner a une var le caractère a l'index actuel
dans ta chaîne ? */
nbdechar++;
}
nbdechar--;
return nbdechar;
}


Pour le reste, seul chose a dire c'est que :
while (i < my_strlen(src)) /* la du coup tu rappelles N fois ta fonction my_strlen, du coup tu
gagnes en sz mais en temps d'exe tu perds un temps non négligeable, mais au pire tu verra ça
au fur et a mesure que tu codes, si tu appelles 100 fois strcpy dans un code, vaut mieux perdre
une variable en stockant la taille que de rappeler la fonction strlen N fois */


Et dans ton strncpy, il se passe quoi si ta src est < a la taille ? tu lis des datas en dehors de src[0 to size]. Ça c'est géré par la fonction strncpy, du coup tu dois aussi le gérer.

Sinon c'est pas trop mal début.


Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 22 Mar 2011, 13:34 
Membre
User avatar

Joined: 20 Sep 2010, 16:45
Posts: 27
Location: France
Hello,
En fait j'assigne à i le caractère à l'index actuel dans ma chaîne afin que la boucle s'arrête lorsque i vaudra '\0'.
J'ai tort?
Ensuite pour le while (i < my_strlen(src)) merci, c'est noté :)
Enfin pour le strncpy je corrige ça et j'édite.
Merci beaucoup.
Amicalement, grimm.


Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 14 May 2011, 12:23 
Modérateur Section
User avatar

Joined: 31 Mar 2009, 18:04
Posts: 177
Location: 90n86w
Quote:
En fait j'assigne à i le caractère à l'index actuel dans ma chaîne afin que la boucle s'arrête lorsque i vaudra '\0'.
J'ai tort?


oui/non, non car ça fonctionne, oui car un simple
Code:
s[nb_cchars]
suffit pour la comparaison.


Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 06 Jun 2011, 01:40 
Membre
User avatar

Joined: 05 Apr 2009, 20:50
Posts: 10
Voici pour ma part les 4 premiers exercices, en sautant my_strcmp (je dois un peu plus m'y attarder).
#include <stdio.h>
#include <stdlib.h>

size_t my_strlen(char *str)
{
size_t i = 0;

while(str[i] != '\0')
i++;

return i;
}

char *my_strcpy(char *dest, char *src)
{
int i = 0;

while(src[i] != '\0')
{
dest[i] = src[i];
i++;
}

return dest;
}

char *my_strncpy(char *dest, char *src, int n)
{
int i = 0;

while(i <= n)
{
dest[i] = src[i];
i++;
}
dest[i+1] = '\0';

return dest;
}

char *my_strcat(char *ch1, char *ch2)
{
char *p = NULL;
int i = 0;
p = &ch1[my_strlen(ch1)];
*p = ' ';

while(ch2[i] != '\0')
{
p[i] = ch2[i];
i++;
}

return ch1;
}

char *my_strncat(char *ch1, char *ch2, int n)
{
char *p = NULL;
int i = 0;

p = &ch1[my_strlen(ch1)];
*p = ' ';

while(i < n)
{
p[i] = ch2[i];
i++;
}

return ch1;
}

char *my_strchr(char *s1, char c)
{
int i = 0;

while(s1[i] != c)
i++;
if(i != strlen(s1))
return &s1[i];
else
return NULL;
}

char *my_strrchr(char *s1, char c)
{
int i = my_strlen(s1);

while(s1[i] != c)
i--;
if(i != 0)
return &s1[i];
else
return NULL;
}


Top
 Profile  
 
 Post subject: Re: Exercices C
PostPosted: 06 Jun 2011, 19:36 
Modérateur Section
User avatar

Joined: 31 Mar 2009, 18:04
Posts: 177
Location: 90n86w
quelques precisions, strcpy ajoute le 0 en fin de string, contrairement au strncpy qui lui ne l'ajoute pas, tu as confondu surement, strncpy ajoute des nullbytes seulement si n > a la taille de src si ya un nullbyte dans src... read the man

char *my_strcat(char *ch1, char *ch2)
{
...
/* pourquoi faire ca ?, si ch2 = "" tu del le nullbyte !! pareil pour strncat*/
*p = ' ';
...
}

char *my_strrchr(char *s1, char c)
{
...
/* peut segfault si ya pas de c dans s1 par example tu pars alors dans les negatifs voir en boucle infinie*/
while(s1[i] != c)
i--;
...
}
[/quote]


Top
 Profile  
 
Post new topic Reply to topic  [ 7 posts ] 


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group