Mise en ordre alphabetique de 2 chaines sans utiliser strcmp et strncmp

Contenu du snippet

Ayant eu à faire ceci en partiel, je me suis dit que quelqu'un qui était aussi en fin d'année de DUT GEII pourrait en avoir besoin !!!
Ce partiel concernait surtout les chaines de caracteres, donc... amusez vous bien, c'est marrant cinq minutes mais apres on se lasse... :(

Source / Exemple :


#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1024

int ordre_alpha(char *CH1, char *CH2); //definition de la fonction

main()
{
                char CH1[MAX]; //premiere chaine de caractères 
    char CH2[MAX]; //seconde chaine de caracteres
    int ordre;

    printf("Entrez la chaine 1: ");
    gets(CH1);
    printf("Entrez la chaine 2: ");
    gets(CH2);

    ordre=ordre_alpha(CH1, CH2); // appel de la fonction ordre_alpha

    if (ordre==0)
    {
        printf("Remise en ordre:\n%s\n%s\n", CH2, CH1);
    }

    if (ordre==1)
    {
        printf("Remise en ordre:\n%s\n%s\n", CH1, CH2);
    }

    if (ordre==2)
    {
        printf("Vous avez entre deux chaines identiques.\n");
    }

    return(0);
}

int ordre_alpha(char *CH1, char *CH2)
{
    int i, n, m;
    m=strlen(CH1);
    n=strlen(CH2);

	if (m!=n)
	{
		if (m<n)
		{
			for (i=0; i<n;i++)
			{
				CH1[i]= tolower(CH1[i]); //on passe tout en minuscule afin de ne pas avoir de conflits avec des majuscules
				CH2[i]= tolower(CH2[i]);

				if(CH1[i]!=CH2[i]) // si on détecte une différence 
				{
					if (CH1[i]<CH2[i]) // et si la premiere chaine est inférieure de code ASCII alors
					{
						return (1); // on retourne 1, qui veut dire que l'on est bien dans l'odre alphabétique
					}
					else return 0; // sinon on retourne 0
				}
			}
		}

		if (n<m) // de meme que pour la précédente fonction
		{
			for (i=0; i<m;i++)
			{
				CH1[i]= tolower(CH1[i]);
				CH2[i]= tolower(CH2[i]);

				if(CH1[i]!=CH2[i])
				{
					if (CH1[i]<CH2[i])
					{
						return (1);
					}
					else return 0;
				}
			}
		}
	}

    else if (m==n)
    {
        for (i=0; i<n;i++)
        {
            CH1[i]= tolower(CH1[i]);
            CH2[i]= tolower(CH2[i]);

            if(CH1[i]!=CH2[i])
            {
                if (CH1[i]<CH2[i])
                {
                    return (1);
                }
                else 
                {
                    return (0);
                }
            }
        }
    return(2);
        
    }
}

Conclusion :


N'oubliez pas de compilez et oui je sais il y a un warning, je ne sais d'ailleurs pas trop pourquoi, si jamais vous vous savez à quoi il est du, ecrivez moi ;) et de toute facon ca marche quand meme !!!
Et aussi il faut cliqué sur le point d'exclamation plutot que sur l'autre truc pour afficher la fenetre car comme je n'ai pas mis de 'system(pause)' et bien la fenetre se ferme automatiquement!

PS: mille excuses pour mes éventuelles fautes d'orthographe...

MISE A JOUR: j'ai bien noté le dernier commentaire et j'ai rajouté un if(m!=n) avec 2 cas possible (m<n et n<m) mais ca me fait tjr le warning !!! Je ne comprends pas...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_bethany)