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! ^^
¿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?
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... :-\
#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));
}
El main era muy similar al que yo hacia, solo que no estaba bien jaja, Muchas gracias por tu ayuda!
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.
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!
Te dejan usar strcmp o strcmpi?
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
Ahora sii, jajaja, muchas gracias, es que estoy aprendiendo C y aun soy un poco novato con todo esto, me sirvio de mucho! ;-) ;-)
Cita de: ivancea96 en 8 Abril 2015, 21:41 PM
#include <iostream>
using namespace std;
int main()
{
cout << strcmpi("asd", "ASD") << endl;
cin.get();
return 0;
}
Cita de: Miseryk en 9 Abril 2015, 17:32 PM
#include <iostream>
using namespace std;
int main()
{
cout << strcmpi("asd", "ASD") << endl;
cin.get();
return 0;
}
Incluso si strcmpi() fuera una función estándar, no es lo mismo que strcmp(). Y aquí se trata de comparar cadenas asecas.
Cita de: ivancea96 en 9 Abril 2015, 17:47 PM
Incluso si strcmpi() fuera una función estándar, no es lo mismo que strcmp(). Y aquí se trata de comparar cadenas asecas.
#include <iostream>
int main()
{
std::cout << strcmp("asd", "ASD") << std::endl;
std::cin.get();
return 0;
}
así?
strcmp() es de la librería string.h. Además, recuerda que es C.
Hola.
Otra forma puede ser:
int cmpstr( char s1[], char s2[] ) {
int i;
for( i=0; s1[i] == s2[i]; i++ )
if ( s1[i] == '\0' ) return 0;
return s1[i] - s2[i] ;
}
o también:
int cmpstr( char* a, char* b ) {
for( ; *a == *b; a++, b++ )
if ( *a == '\0') return 0;
return *a - *b;
}
Saludos .
O de esta forma (también la dejo para algún curioso que esté en este tema)
#include <Windows.h>
#include <iostream>
typedef int (*Mystrcmp)(const char * _Str1, const char * _Str2);
Mystrcmp M_strcmp;
int main()
{
M_strcmp = (Mystrcmp)GetProcAddress(GetModuleHandle("NTDLL.DLL"), "strcmp");
std::cout << M_strcmp("ASD", "ASD") << std::endl;
std::cin.get();
return 0;
}