Jump to content

Recommended Posts

Posted

Hello, voici un petit exercice, tiré du livre "The C Programming Language" (K&R).

 

 

En suivant ce prototype (vous  pouvez changer le nom des paramètres) :

int strend(char *s, char *t)

Créez une fonction qui retourne 1 si la string s se termine par la string t,sinon, retourne 0.

 

Exemples :

strend("ABCDavy","Davy"); // == 1
strend("Melinyel","oyel"); // == 0
strend("Microsoft","sofa"); // == 0
strend("Forum","rum"); // == 1

Je posterais ma solution mardi  :)

  • Upvote 1
Posted (edited)

OK, amusant, je part du principe qu'on a le droit aux fonctions de la libc, ce qui donnerais:

#include <stdlib.h>

int strend(char *s, char *t)
{
    char *tmp;

    tmp = s;
    while ((tmp = strstr(tmp, t)) != NULL);
    return (tmp != NULL && strlen(tmp) == strlen(t));
}
Edited by AlexMog
  • Upvote 1
Posted

@Alex:

 

strstr retourne a la première apparition de t, donc avec ta version :

strend("ABDAVYBD","BD");

retourne 0, alors que ça devrait retourner 1.

Posted

Voici ma solution :

 

Je sais pas ce qu'il c'est passer avec l'identation ...

int my_strend(const char *str, const char *ending)
{
int lStr = my_strlen(str);
int lEnd = my_strlen(ending);

if(!lStr || !lEnd)
return 0;

const char *iterator = str + lStr - lEnd;
int i = 0;
while(iterator[i] != '\0' && ending[i] != '\0')
{
if(iterator[i] != ending[i])
{
return 0;
}
i++;
}

return 1;
}

Itère de str - taille d'str + taille de l'ending, jusqu’à la fin de str, en comparant chaque caractère.

 

Dommage qu'il n'y ai pas eu plus de participants :(

Posted

Merci d'avoir pris la peine d'avoir fait un exercice, je ne l'avais pas vu cependant c'est une très bonne initiative et très pédagogique. :)
Pour la peine, je vous donne un point de réputation aux deux protagonistes de la discussion (et aussi parce qu'il y a Mint dans la signature).

Good job !

  • Upvote 1
Posted
#include <stdio.h>
#include <string.h>

int my_strend(char *s, char *t);
int my_strlen(char *str);

int main()
{
    int *result;

    result[0] = my_strend("TEST", "ST");
    result[1] = my_strend("Melinyel", "Forum");

    printf("%d\n", result[0]);
    printf("%d\n", result[1]);

    return (0);
}

int my_strend(char *s, char *t)
{
    int lenght_s;
    int lenght_t;
    int i;
    int j;

    lenght_s = strlen(s);
    lenght_t = strlen(t);
    j = 0;

    // On regarde si les dernières lettres de "s" correspondent à "t".
    for (i = lenght_s - lenght_t; i < lenght_s; i++)
    {
        if (s[i] != t[j])
            return (0);

        j++;
    }

    return (1);
}

int my_strlen(char *str)
{
    int lenght;

    for (lenght = 0; str != "\0"; lenght++);

    return lenght;
}

Voila mon code mais j'ai un problème avec ma fonction "my_strlen", il faut que je regarde ça de plus près :unsure:

Posted

Suffit d'un peu de relecture ;)

 

Ta fonction my_strlen n’incrémente pas le pointeur str, donc si le premier caractère n'est pas '\0' ça fait une boucle infinie.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...