[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

Ahora sii, jajaja, muchas gracias, es que estoy aprendiendo C y aun soy un poco novato con todo esto, me sirvio de mucho!  ;-) ;-)

Miseryk

Cita de: ivancea96 en  8 Abril 2015, 21:41 PM


Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main()
{
cout << strcmpi("asd", "ASD") << endl;

cin.get();

return 0;
}
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

Cita de: Miseryk en  9 Abril 2015, 17:32 PM
Código (cpp) [Seleccionar]

#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.

Miseryk

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.

Código (cpp) [Seleccionar]

#include <iostream>

int main()
{
std::cout << strcmp("asd", "ASD") << std::endl;

std::cin.get();

return 0;
}


así?
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

strcmp() es de la librería string.h. Además, recuerda que es C.

ecfisa

#15
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 .

Miseryk

O de esta forma (también la dejo para algún curioso que esté en este tema)

Código (cpp) [Seleccionar]

#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;
}
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!!!