topologia sinonimo programacion orden matematicas lexicografo lexicografico ejemplos discretas demostracion c++ string compare

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.