Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: zikotik en 15 Noviembre 2014, 06:35 am



Título: Comparar valores String o Char [C++]
Publicado por: zikotik en 15 Noviembre 2014, 06:35 am
Hace unos días estaba haciendo una apliación en la que necesitaba en cierta parte del proceso, comparar una variable tipo string con una variable tipo char tanto en tamaño como en valor, pero no debía usar sentencias for ni while. Así y entonces, desarrollé esta pequeña función que quizá le pueda ser útil a aquellos que recién empiezan.

Código
  1. #include <cstring>
  2.  
  3. bool strchk(string a, string b){
  4. if(a.size() == b.size() && a == b){
  5. return 1;
  6. } return 0;
  7. }

La forma de uso sería la siguiente...

Código
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. bool strchk(string a, string b){
  6. if(a.size() == b.size() && a == b){
  7. return 1;
  8. } return 0;
  9. }
  10.  
  11. int main(int argc, char *argv[]){
  12. if(strchk(argv[1], argv[2]) == 1){
  13. cout << "Son iguales";
  14. } else {
  15. cout << "Son desiguales";
  16. }
  17. }

En una consola de comandos se ejecutaría de la siguiente manera...

Código
  1. app.exe texto texto
  2. Son iguales
  3.  
  4. app.exe texto palabra
  5. Son desiguales

Si modificamos un poco el main, podemos usarlo para crear un sistema de inicio de sesión (por ejemplo).

Código
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. bool strchk(string a, string b){
  6. if(a.size() == b.size() && a == b){
  7. return 1;
  8. } return 0;
  9. }
  10.  
  11. int main(int argc, char *argv[]){
  12. char pwd[9] = "1a2b3c4d";
  13. if(strchk(argv[1], pwd) == 1){
  14. cout << "La clave es correcta";
  15. } else {
  16. cout << "La clave es incorrecta";
  17. }
  18. }


Título: Re: Comparar valores String o Char [C++]
Publicado por: rir3760 en 15 Noviembre 2014, 15:55 pm
En tu programa cuando se llama a la función "strchk" sus argumentos (las cadenas "a la C") se utilizan para inicializar los parámetros correspondientes (objetos de la clase string). Eso lleva a que la función no es necesaria ya que se pueden crear objetos anónimos de dicho tipo realizando la comparación directamente.

Un ejemplo para explicarlo mejor:
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4.  
  5. #include <string>
  6. using std::string;
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.   if (string(argv[1]) == string(argv[2]))
  11.      cout << "Son iguales" << endl;
  12.   else
  13.      cout << "Son desiguales" << endl;
  14.  
  15.   return 0;
  16. }

Un saludo


Título: Re: Comparar valores String o Char [C++]
Publicado por: zikotik en 16 Noviembre 2014, 02:29 am
El problema es que cuando quise hacerlo de manera directa, el compilador me tiraba error y no me dejaba compilarlo, entonces tuve que hacer de manera obligada, la función "strchk" (utilizo devcpp).


Título: Re: Comparar valores String o Char [C++]
Publicado por: rir3760 en 16 Noviembre 2014, 02:41 am
¿A que te refieres con "cuando quise hacerlo de manera directa, el compilador me tiraba error"?

Por cierto no es necesario incluir el encabezado <cstring>, en su lugar debes incluir <string> para tener acceso a la clase del mismo nombre.

Un saludo


Título: Re: Comparar valores String o Char [C++]
Publicado por: zikotik en 16 Noviembre 2014, 02:58 am
A veces cuando quiero hacer algún código, el compilador me tira error, entonces tengo que buscar una manera alterna de hacer las cosas. Debe ser un error de instalación de las librerías o algo así posiblemente.


Título: Re: Comparar valores String o Char [C++]
Publicado por: zShackra en 16 Noviembre 2014, 03:02 am
A veces cuando quiero hacer algún código, el compilador me tira error, entonces tengo que buscar una manera alterna de hacer las cosas. Debe ser un error de instalación de las librerías o algo así posiblemente.

Hola, ¿le has dado una oportunidad a Qt Creator, Visual Studio o Code::Blocks?...


Título: Re: Comparar valores String o Char [C++]
Publicado por: zikotik en 16 Noviembre 2014, 04:29 am
Probé el Visual Studio y me resultó incómodo, el Qt Creator no lo tenía conocido y acerca del Code::Blocks, oí muchas notas positivas al respecto, pero nunca lo probé.


Título: Re: Comparar valores String o Char [C++]
Publicado por: zShackra en 16 Noviembre 2014, 05:07 am
Probé el Visual Studio y me resultó incómodo, el Qt Creator no lo tenía conocido y acerca del Code::Blocks, oí muchas notas positivas al respecto, pero nunca lo probé.

Pues bueno, el Visual Studio por incómodo que sea, tiene el mejor depurador que he probado en sistemas NT, además de ser un entorno muy pero muy completo...

Code::Blocks es muy ligero y viene casi completamente configurado, aunque usa MinGW como compilador (al igual que QtCreator y DevC++), honestamente no les veo nada malo a los tres IDE, Visual Studio usa el compilador de Microsoft y aún así desenvuelve un trabajo espectacular.

Te sugiero darle una oportunidad al menos a Code::Blocks, creo y sin temor a equivocarme, que esos problemas que tienes con DevC++ desaparecerían con IDE's más trabajados (sin quitarle su mérito a Orwell, pero nada como un proyecto desarrollado por una comunidad y/o empresa).


Título: Re: Comparar valores String o Char [C++]
Publicado por: zikotik en 16 Noviembre 2014, 12:43 pm
Qué ironía, empezó siendo un aporte, y terminó siendo una solución fomentada.
Borré el DevCpp, instalé el Code::Blocks y no tuve más problemas al compilar.

Gracias por tu solución zShackra!


Título: Re: Comparar valores String o Char [C++]
Publicado por: zShackra en 16 Noviembre 2014, 20:39 pm
Qué ironía, empezó siendo un aporte, y terminó siendo una solución fomentada.
Borré el DevCpp, instalé el Code::Blocks y no tuve más problemas al compilar.

Gracias por tu solución zShackra!

Me alegra que te haya servido de algo... DevC++ es un IDE bastante deficiente.