c++ - sinonimo - Comparando cuerdas lexicográficamente
orden lexicografico programacion (2)
Pensé que si utilizaba operadores como ">" y "<" en c ++ para comparar cadenas, estos los compararían de forma lexicográfica, el problema es que esto solo funciona a veces en mi computadora. Por ejemplo
if("aa" > "bz") cout<<"Yes";
Esto no imprimirá nada, y eso es lo que necesito, pero si escribo
if("aa" > "bzaa") cout<<"Yes";
Esto imprimirá "Sí", ¿por qué sucede esto? ¿O hay alguna otra manera que debería usar para comparar cadenas lexicográficamente?
Comparando std::string
-s así funcionará. Sin embargo estás comparando los literales de cadena. Para hacer la comparación que desea, inicialice una cadena std :: con ellos o use strcmp:
if(std::string("aa") > std::string("bz")) cout<<"Yes";
Esta es la solución de estilo c ++ para eso.
O alternativamente:
if(strcmp("aa", "bz") > 0) cout<<"Yes";
EDITAR (gracias al comentario de Konrad Rudolph): de hecho, en la primera versión, solo uno de los operandos debe convertirse explícitamente, así:
if(std::string("aa") > "bz") cout<<"Yes";
Volverá a funcionar como se esperaba.
Está comparando cadenas "primitivas", que son de tipo char const *
.
Lo siguiente es esencialmente equivalente a su ejemplo:
char const * s1 = "aa";
char const * s2 = "bz";
if ( s1 > s2 ) cout<<"Yes";
Esto es comparar los punteros (las direcciones de memoria de las cadenas), no los contenidos.
@izomorphius ha sugerido algunas buenas soluciones.