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
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):
#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;
}
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 (http://www.cplusplus.com/reference/istream/istream/getline/).
En el caso de utilizar la clase string es relativamente fácil:
#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
Buenas!!
Creo que lo que intentas es buscar si las dos cadenas son anagramas al ser asi te dejo una
posible solución
#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