Forum Programmation.c Comparaison de la longueur de 2 chaines de carateres

Posté par  (site web personnel) .
Étiquettes : aucune
0
23
déc.
2004
Bonjour,

Y'a t'il une fonction en C qui permette de comparer la longueur de 2 chaines de caracteres?

Actuellement je le fait avec des sizeof.

Julien,


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

int main(int argc, char *argv[])
{
char * chaine1;
char * chaine2;
char *chaine3;

chaine1 = "http://ad.fr.doubleclick.net/796615/1122_728x90actu_vis_yahoo.jpg(...)";
chaine2 = "http://ad.fr.doubleclick.net/796615/728x90actu_tit_yahoo.gif(...)";

chaine3 = malloc(sizeof chaine1);

if (sizeof chaine1 > sizeof chaine2)
{
chaine3 = malloc(sizeof chaine1);
}
else
{
chaine3 = malloc(sizeof chaine2);
}
return 0;
}
  • # string.h

    Posté par  (site web personnel) . Évalué à 4.

    dans string.h t'as une fonction qui s'appelle strlen : string length, ca va te mesurer la longeur de ta chaine (moins le dernier caractere qui est nul, donc n'oublie pas de faire malloc(strlen(chaine1)+1) )
    • [^] # Re: string.h

      Posté par  (site web personnel) . Évalué à 1.

      oui j'y avais penser mais en fait je ne sais pas si ça change quelque chose.

      En y reflechissant, je pense que ma question de comparaison de chaine est inutile.
      • [^] # Re: string.h

        Posté par  . Évalué à 6.

        Tu te trompes sur le sens de sizeof : dans ton cas ça vaut la taille de tes pointeurs vers char, c'est-à-dire 4 sur les processeurs Intel 32 bits, ce qui n'a rien à voir avec la longueur de la chaîne pointée (et donc ton test sizeof chaine1 > sizeof chaine2 serait toujours faux vu que les deux ont la même taille). Si tu avais char chaine1[] = "Bonjour"; tu aurais sizeof chaine1 == 8.
    • [^] # Re: string.h

      Posté par  . Évalué à 0.

      En fait, dans string.h, il y a même une fonction pour comparer deux chaines : strcmp(char *, char *)

      il renvoie :
      un nombre négatif si longueur 1 < longueur 2,
      0 si longueur 1= longueur 2
      un nombre positif si longueur 1 > longueur 2
      • [^] # Re: string.h

        Posté par  (site web personnel) . Évalué à 5.

        il me semble que ça ne compare pas la longueur mais l'ordre lexicographique.
        • [^] # Re: string.h

          Posté par  (site web personnel) . Évalué à 0.

          en fait, ça compare les deux...

          mais la première chose que fait cette fonction est déjà de comparer les longueurs des chaînes...
          (si une chaîne est plus petite que l'autre, alors, la plus petite est la première dans l'ordre lexicographique).
          • [^] # Re: string.h

            Posté par  . Évalué à 6.

            strcmp compare les caractères un par un et renvoie la différence s'ils sont différents, elle ne compare pas les longueurs des chaînes.

            Ce que tu dis est valable si les deux chaînes commencent pareil (pour "toto" et "tototo" ça renverra un entier négatif), mais pour "totu" et "tototo" ça renverra un entier positif ('u' > 'o') alors que "totu" est plus court que "tototo".
  • # Et le FLM dans tout ca?

    Posté par  (site web personnel) . Évalué à 1.

    2 mallocs, et pas de free?
    Mais ou va le monde?

    --
    GiGa
    Membre du FLM

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.