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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ordenar un string.
« en: 14 Abril 2023, 12:00 pm »

Hola, tengo una duda, si se ordena un string alfabéticamente, también se ordena numéricamente, es decir, si tengo L845,L001,A648 y A001, se ordenara de forma: A001, A648, L001 y L845 ??

Gracias


En línea

Danielㅤ


Desconectado Desconectado

Mensajes: 1.681


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Ordenar un string.
« Respuesta #1 en: 14 Abril 2023, 16:41 pm »

Hola, no, no se ordenará de esa forma porque el ordenamiento de string se maneja por separado, es decir al ordenar alfabéticamente se está ordenando por valores del tipo string pero al ordenar por números se ordenará del tipo de valor int, por lo tanto una variable tiene que ser tomada como un string o int y de ahí hacer el proceso por separado no es posible mezclar esos dos tipos de valores para conseguir ese orden.

Además cuando una variable contiene texto y números en su valor, es del tipo string pero si esa variable por ejemplo la intentas convertir en int, el intérprete, compilador o programa te dará un error de conversión porque una variable del tipo int solo puede llevar números y no letras pero la del tipo string si que puede.

Lo que se hace habitualmente en este caso es trabajar por separado, primero ordenar los valores string del tipo letras y después los valores int del tipo número.

Aunque puede existir alguna librería o alguna función que haga ese ordenamiento de ordenar los dos valores juntos, por ejemplo tal vez algún programador haya creado una función y la haya aportado en algún foro o en stackoverflow, aqui en el foro no he visto ninguna, podrías también buscar en Google.


Saludos


« Última modificación: 14 Abril 2023, 16:44 pm por Danielㅤ » En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: Ordenar un string.
« Respuesta #2 en: 14 Abril 2023, 20:48 pm »

¿Un string? Eso significaría que tienes una única cadena con el valor "L845,L001,A648,A001" y la quieres "ordenar", pero evidentemente, por sí solas, las funciones estándar de ordenamiento no van a saber que se trata de distintos valores separados por comas, así que supongo que en realidad te refieres a una colección (por ejemplo, un vector) de varias cadenas que respectivamente tienen los valores "L845", "L001", etc. ¿no?

Si es así, entonces sí se ordenarían también los números, y en tu ejemplo el orden quedaría justo como lo planteas, suponiendo que uses la función estándar típica para esto (std::sort). Lo importante es entender cómo se comparan de forma predeterminada las cadenas en C++: caracter por caracter y usando su valor ASCII. O sea, no deberías mezclar minúsculas con mayúsculas, y los números deben tener un número de dígitos fijo. Ya lo estás haciendo correctamente en el ejemplo que pones, así que mientras no rompas ese patrón, no debería haber problema.
En línea

Arhoc

Desconectado Desconectado

Mensajes: 27


Welcome home, root!


Ver Perfil WWW
Re: Ordenar un string.
« Respuesta #3 en: 19 Abril 2023, 04:30 am »

Hola, tengo una duda, si se ordena un string alfabéticamente, también se ordena numéricamente, es decir, si tengo L845,L001,A648 y A001, se ordenara de forma: A001, A648, L001 y L845 ??

Gracias

En C/C++, el orden alfabético está determinado por los valores ASCII de los caracteres en el string, por lo que "A001" vendría antes que "A648" porque "0" tiene un valor ASCII menor que "6". Si deseas ordenar los strings de manera numérica, puedes usar el método std::sort y proporcionar una función personalizada de comparación que convierta los strings a números antes de compararlos. Por ejemplo:

Código
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. bool custom_sort(string a, string b) {
  8.    int num_a = stoi(a.substr(1));
  9.    int num_b = stoi(b.substr(1));
  10.    return num_a < num_b;
  11. }
  12.  
  13. int main() {
  14.    vector<string> strings{"L845", "L001", "A648", "A001"};
  15.    sort(strings.begin(), strings.end(), custom_sort);
  16.    for (auto s : strings) {
  17.        cout << s << endl;
  18.    }
  19.    return 0;
  20. }
  21.  

Esto imprimirá "A001", "A648", "L001" y "L845" en orden. Aquí, la función custom_sort convierte los strings a números utilizando stoi, los cuales se utilizan en la comparación para clasificar los strings numéricamente en lugar de alfabéticamente.
En línea

I am trapped in a TTY, this is the new home for mind, my root directory is still not mounting today.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines