[C] Comparar 2 cadenas sin usar <string.h>

Iniciado por Ataulfo7, 8 Abril 2015, 17:55 PM

0 Miembros y 1 Visitante están viendo este tema.

Ataulfo7

Hola buenas, soy nuevo en el foro, ya que he indagando por internet en busca de soluciones a un problema de programación en C e visto muchas veces este foro, pero no encontré la solución...
Me piden que compare dos cadenas sin usar <string.h>, y que si son iguales de un 0, si la primera cadena es mayor que la segunda de un 1, y viceversa de un -1, pero lo único que me dan para hacerlo es esto:

int Compara (char s1[], char s2[]){
int i;
for(i=0;(s1 [i]==s2[i]) &&(s1 [i] != '/0') && (s2[i] != '/0') ; i++);
return (s1[i]-s2[i]);
}

Seria necesario el uso de apuntadores?? Es que estoy intentando de todo, pero no me saleee :S, si alguien me puede ayudar... Gracias de antemano! ^^

ivancea96

¿Cómo que te dan eso para hacerlo? Esa función es casi igual a lo que describes que hay que hacer. ¿Qué más necesitas?

Ataulfo7

A la hora de crear el main, y ponerme a crear las cadenas de caracteres para poder compararlas, me quedo pillado y no se como seguir. Es decir para que las dos cadenas de caracteres que creé, se comparen con ese código y salga el resultado...   :-\

ivancea96

#include <stdio.h>

int Compara (char s1[], char s2[]){
    int i;
    for(i=0;(s1 [i]==s2[i]) &&(s1 [i] != '\0') && (s2[i] != '\0') ; i++);
    return (s1[i]-s2[i]);
}

int main(){
    char a[] = "Cadena 1",
         b[] = "Cadena 2";
    printf("%d", Compara(a,b));
}

Ataulfo7

El main era muy similar al que yo hacia, solo que no estaba bien jaja, Muchas gracias por tu ayuda!

ivancea96

Cita de: Xukyllo en  8 Abril 2015, 17:55 PM
si son iguales de un 0, si la primera cadena es mayor que la segunda de un 1, y viceversa de un -1

Cabe decir que esa función no returna "1 y -1", sino que retorna la diferencia entre los primeros caracteres diferentes encontrados.

Ataulfo7

Ya vi que lo que hace es restar la diferencia de números, pero no importa ya que eso ahora vere como arreglarlo, lo único en lo que no caia era en hacer para que me leyera las dos cadenas.  :silbar:
Gracias!

Miseryk

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It's never too late to change our luck
So, don't let them steal your light
Don't let them break your stride
There is light on the other side
And you'll see all the raindrops falling behind
Make it out tonight
it's a revolution

CL!!!

ivancea96


rir3760

Cita de: Xukyllo en  8 Abril 2015, 17:55 PMMe piden que compare dos cadenas sin usar <string.h>, y que si son iguales de un 0, si la primera cadena es mayor que la segunda de un 1, y viceversa de un -1
Dos comentarios:

* En la condición del bucle si los caracteres son iguales no es necesario verificar que ambos sean diferentes de '\0', basta con comparar solo uno (el que sea).

* Para retornar 1, 0 o -1 dependiendo si la primera cadena es mayor, igual o menor que la segunda basta con utilizar los operadores relaciones ">" y "<", de esta forma:
return (s1[i] > s2[i]) - (s1[i] < s2[i]);

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language