elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cadenas c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cadenas c++  (Leído 2,305 veces)
jaimeramirez10

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Cadenas c++
« en: 11 Junio 2013, 15:50 pm »

Para la universidad  realice un programa en c++, se pedia que se digitaran dos cadenas y que se comprobara si las dos cadenas tenian las mismas letras, el problema es que si pongo las letras en desorden no dice que son iguales,  si se pone espacio en la primera cadena se salta de una vez y dice que son iguales, aqui el programa:
#include <iostream>
#include<cstring>
using namespace std;
int main(){
  char cadena1[1000];
  char cadena2[1000];
  int n;
  cout<<"cadena1 es: ";
  cin>>cadena1;
  cout << "cadena2 es: ";
  cin>>cadena2;
  if (strcmp(cadena1,cadena2)!=0){
      cout<<"Las cadenas no son iguales\n";
   }
   if(strcmp(cadena1,cadena2)==0){
      cout<<"Las cadenas no son iguales\n"; 
      }
  system("Pause");
}
Gracias por la ayuda



En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Cadenas c++
« Respuesta #1 en: 11 Junio 2013, 16:11 pm »

Código
  1. if (strcmp(cadena1,cadena2)!=0){
  2.      cout<<"Las cadenas no son iguales\n";
  3. }
  4.  
  5. if(strcmp(cadena1,cadena2)==0){
  6.      cout<<"Las cadenas no son iguales\n";  
  7.      }
Has puesto el mismo texto en las dos comparaciones  ;-)

Por cierto, C++ incluye un tipo de cadena más fácil de usar (string):

Código
  1. #include <iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int main(){
  5.  string Cadena
  6.  string Cadena2
  7.  int n;
  8.  cout<<"cadena1 es: ";
  9.  cin>>cadena1;
  10.  cout << "cadena2 es: ";
  11.  cin>>cadena2;
  12.  if (Cadena != Cadena2){
  13.      cout<<"Las cadenas no son iguales\n";
  14.   }
  15.   if(Cadena == Cadena2){
  16.      cout<<"Las cadenas son iguales\n";  
  17.      }
  18.  system("Pause");
  19.  return 0;
  20. }


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Cadenas c++
« Respuesta #2 en: 11 Junio 2013, 16:35 pm »

el problema es que si pongo las letras en desorden no dice que son iguales
Antes de la comparacion debes ordenar el contenido de las dos cadenas. Si se trata de arrays de caracteres puedes utilizar la función qsort (prototipo en <cstdlib>) y una propia, para objetos de la clase string la función sort (el encabezado aquí es <algorithm>).

si se pone espacio en la primera cadena se salta de una vez
Eso sucede porque al utilizar el operador "<<" este lee una palabra. En su lugar utiliza la función getline.

En el caso de utilizar la clase string es relativamente fácil:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8. using std::getline;
  9.  
  10. #include <algorithm>
  11. using std::sort;
  12.  
  13. int main()
  14. {
  15.   cout << "Primera cadena: ";
  16.   string a;
  17.   getline(cin, a);
  18.  
  19.   cout << "Segunda cadena: ";
  20.   string b;
  21.   getline(cin, b);
  22.  
  23.   sort(a.begin(), a.end());
  24.   sort(b.begin(), b.end());
  25.  
  26.   cout << "Las cadenas ";
  27.   if (a != b)
  28.      cout << "NO ";
  29.   cout << "estan formadas por los mismos caracteres" << endl;
  30.  
  31.   return 0;
  32. }

Un saludo
En línea

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
CCross

Desconectado Desconectado

Mensajes: 36


Ver Perfil
Re: Cadenas c++
« Respuesta #3 en: 11 Junio 2013, 16:38 pm »

Buenas!!

Creo que lo que intentas es buscar si las dos cadenas son anagramas al ser asi te dejo una
posible solución

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6.  
  7.  char cadena1[30], cadena2[30];
  8.  int i = 0, j, k = 0;
  9.  
  10.  printf("Introduzca las dos cadenas: ");
  11.  scanf("%s" "%s" , cadena1, cadena2);
  12.  
  13.  if (strlen(cadena1) != strlen(cadena2))
  14.    printf("No son anagramas\n");
  15.  
  16.  else
  17.  {
  18.        for (; cadena1[i]!='\0'; i++){
  19.            for (j=0; j < cadena2[j]!='\0'; j++)
  20.                if (cadena1[i] == cadena2[j]){
  21.                    k++;
  22.                  }
  23.           }
  24.       if(strlen(cadena2)== k)
  25.          printf("Son anagramas\n");
  26.  
  27.        else
  28.          printf("No son anagramas\n");
  29.   }
  30.  return 0;
  31. }
  32.  

Saludos  ;D
« Última modificación: 11 Junio 2013, 16:40 pm por CCross » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separación en cadenas
Programación Visual Basic
yeikos 4 1,820 Último mensaje 10 Septiembre 2005, 06:00 am
por EstoyBaneado
Cadenas...
Programación Visual Basic
programatrix 3 2,297 Último mensaje 30 Diciembre 2005, 22:13 pm
por programatrix
cadenas
Programación C/C++
johrdy 8 5,191 Último mensaje 14 Febrero 2012, 19:03 pm
por Valkyr
Ordenas cadenas en C?
Programación C/C++
Geckored 1 1,571 Último mensaje 26 Noviembre 2014, 06:58 am
por MeCraniDOS
cadenas en c/c++
Programación C/C++
Beginner Web 4 2,258 Último mensaje 3 Julio 2019, 04:42 am
por codX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines