Cadenas c++

Iniciado por jaimeramirez10, 11 Junio 2013, 15:50 PM

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

jaimeramirez10

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


amchacon

Código (cpp) [Seleccionar]
if (strcmp(cadena1,cadena2)!=0){
     cout<<"Las cadenas no son iguales\n";
}

if(strcmp(cadena1,cadena2)==0){
     cout<<"Las cadenas no son iguales\n";  
     }

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 (cpp) [Seleccionar]
#include <iostream>
#include<cstring>
using namespace std;
int main(){
 string Cadena
 string Cadena2
 int n;
 cout<<"cadena1 es: ";
 cin>>cadena1;
 cout << "cadena2 es: ";
 cin>>cadena2;
 if (Cadena != Cadena2){
     cout<<"Las cadenas no son iguales\n";
  }
  if(Cadena == Cadena2){
     cout<<"Las cadenas son iguales\n";  
     }
 system("Pause");
 return 0;
}
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

Cita de: jaimeramirez10 en 11 Junio 2013, 15:50 PMel 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>).

Cita de: jaimeramirez10 en 11 Junio 2013, 15:50 PMsi 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 (cpp) [Seleccionar]

#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;
using std::getline;

#include <algorithm>
using std::sort;

int main()
{
   cout << "Primera cadena: ";
   string a;
   getline(cin, a);
   
   cout << "Segunda cadena: ";
   string b;
   getline(cin, b);
   
   sort(a.begin(), a.end());
   sort(b.begin(), b.end());
   
   cout << "Las cadenas ";
   if (a != b)
      cout << "NO ";
   cout << "estan formadas por los mismos caracteres" << endl;
   
   return 0;
}


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

CCross

#3
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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
   
 char cadena1[30], cadena2[30];
 int i = 0, j, k = 0;

 printf("Introduzca las dos cadenas: ");
 scanf("%s" "%s" , cadena1, cadena2);

 if (strlen(cadena1) != strlen(cadena2))
   printf("No son anagramas\n");

 else
 {
       for (; cadena1[i]!='\0'; i++){
           for (j=0; j < cadena2[j]!='\0'; j++)
               if (cadena1[i] == cadena2[j]){
                   k++;
                 }
          }
      if(strlen(cadena2)== k)
         printf("Son anagramas\n");

       else
         printf("No son anagramas\n");
  }
 return 0;
}


Saludos  ;D