¿Para qué usas la inversión de cadenas? [cerrado]

14

En PHP es strrev() , en Rails es .reverse , pero la mayoría de los idiomas no tienen ninguna función de cadena inversa. Algunos tienen funciones de matriz inversa que se pueden utilizar en los caracteres. Estaba pensando que esto debe ser un descuido importante, pero entonces se me ocurrió, ¿para qué usarías el retroceso de la cadena para ???

La única vez que puedo pensar que lo he visto es en demostraciones y lecciones para convertir "Hello World!" en "! dlroW olleH".

Mi pregunta es; ¿Hay un uso para revertir una cadena o es completamente inútil?

.

Addendum

Hubo muchas más respuestas que había anticipado y no todas fueron completamente académicas. Habría puesto dinero para que nadie pudiera dar un ejemplo legítimo. Tampoco pensé que aprendería nada nuevo, pero la sugerencia de expresiones regulares de Mark Canlas es simplemente brillante y espero con ansias la oportunidad de demostrarlo. Gracias a todos.

    
pregunta clockworkgeek 08.12.2010 - 18:11

16 respuestas

17

Sexegers

A veces, los problemas que involucran expresiones regulares se pueden escribir más fácilmente si se invierte la cadena de entrada y se aborda el problema de una manera diferente.

Técnica cortesía del hombre que me enseñó Perl.

Sexeger en PerlMonks

    
respondido por el Mark Canlas 08.12.2010 - 20:56
22

Bueno, esta es una respuesta irónica.

"De vuelta en el día", era dueño de una caja de Unix, y tenía un archivo de diccionario ordenado de palabras en inglés, que se usa para la revisión ortográfica.

Hice un nuevo archivo invirtiendo todas las palabras del diccionario, ordenándolo y luego invirtiéndolo de nuevo. El resultado fue una lista de palabras ordenadas de derecha a izquierda.

Entonces, si lo buscó por una palabra, junto a esa palabra habría palabras con finales similares. ¡Así que fue fácil hacer pequeños poemas!

Realmente puedes divertirte cuando ves lo que rima con qué.

    
respondido por el Mike Dunlavey 08.12.2010 - 21:41
12
public bool IsPalindrome(string toCheck)
{
    return toCheck == toCheck.Reverse();
}
    
respondido por el Scott Whitlock 08.12.2010 - 18:15
12

He sido programador / desarrollador / administrador de sistemas durante unos 10 años y no puedo recordar que alguna vez haya necesitado la inversión de cadenas en situaciones de la vida real.

El único caso de uso inmediato que se me ocurre es la conversión de la base numérica: hecho ingenuamente, el procedimiento devuelve una cadena invertida. Sin embargo, con un poco de matemáticas, puede calcular por adelantado la cantidad de espacio necesario, por lo que puede comenzar a llenar el búfer desde el final.

    
respondido por el zvrba 08.12.2010 - 20:18
7

¡Entrevistas!

Revertir una cadena (en su lugar o no) es una pregunta de entrevista muy común para el conocimiento básico de programación. Un lenguaje que carezca de estas funciones integradas sería difícil de entrevistar. El candidato realmente tendría que saber algo. 1

1: Esta es una respuesta irónica.

    
respondido por el Josh K 08.12.2010 - 20:47
6

He visto situaciones en las que una aplicación de escritorio se comunicaba con dispositivos integrados y cambiaba constantemente el orden de los bytes y los datos se movían como cadenas. Eso es todo para mí, sin embargo.

No habría usado cadenas para esa aplicación, pero así es como era ...

    
respondido por el whatsisname 08.12.2010 - 18:27
5
<span style="unicode-bidi: bidi-override; direction:rtl;">
    <?php echo strrev($emailaddress); ?>
</span>

No es la mejor solución para ofuscar una dirección de correo electrónico, ya que cuando la agregas al portapapeles todavía se invierte. Y, si se hiciera popular, pronto sería detectado por los robots de raspado de correo electrónico.

Aún así, se ha sugerido .

    
respondido por el Nicole 08.12.2010 - 19:07
5

ASCII no es la mejor codificación para la información genética (puede empaquetar los tipos base ACGT como 2bits). Póngalos en una variedad de longlongs y obtendrá 32 "letras" genéticas por palabra. ADN puede darse la vuelta, por lo que debe verificar una parte del ADN para que ambas partes sean copias inversas de una secuencia de prueba. Así que poder revertir una cadena empaquetada de 2 bits puede Ser muy útil para varios tipos de análisis genéticos.

Tenía un elemento en un punto de referencia para las agencias de espionaje, ¿qué tan rápido puede revertir los bits durante mucho tiempo (en realidad, una gran variedad de largos y largos)? El método obvio de intercambiar 2 bits a la vez es mucho más lento que los métodos menos obvios. Estos están relacionados con algunos de los ordenados Algoritmos para la transposición de matrices en el lugar.

Tangurena:   La operación a la que te refieres se llama recuento de población. Deseables similares para datos de bits compactos son iniciales y finales de cero. Hay muchas cosas realmente lindas. que uno puede hacer con datos empaquetados poco. Una sola operación en un largo tiempo es paralela a los datos de 64 vías, por lo que si sabe lo que está haciendo, puede obtener un rendimiento increíble para ciertos tipos de computación.

    
respondido por el Omega Centauri 08.12.2010 - 21:23
5

Cualquier cosa donde trabajar con la cadena invertida es más fácil.

Trabajar con números enteros como cadenas es mucho más fácil si las cadenas se invierten. Construí algunas funciones de biblioteca para hacer matemáticas con enteros grandes y usé la inversión de cadenas para simplificar las funciones aritméticas.

Por supuesto, solo lo he usado para obtener respuestas en el Proyecto Euler, pero aún así, la premisa original se mantiene.

    
respondido por el Axe 08.12.2010 - 22:01
3

Tal vez soporte multilingüe de bajo costo, para idiomas que usan letras de derecha a izquierda (como el árabe), en lugar de izquierda a derecha. Por supuesto, debes tener cuidado con los caracteres de acento que modifican el carácter correcto ...

    
respondido por el Cyclops 08.12.2010 - 22:20
2

No sé, tal vez alguien tenga una necesidad urgente de verificar palindrome's....

No creo que sea completamente inútil, ya que puede haber situaciones en las que uno necesite poder revertir una cadena.

    
respondido por el Darknight 08.12.2010 - 18:14
2

En procesamiento de lenguaje natural & analizando, a veces es más fácil buscar una cadena desde el final hasta el principio. Una cadena inversa sería útil para la depuración, o como una forma alternativa de escribir el bucle (invierta la cadena y luego haga un bucle desde el índice 0 hasta n-1).

También algunos idiomas se escriben de derecha a izquierda, por lo que se podría usar un inversor de cadena para eso si estuvieras en un entorno que no reconociera de forma nativa los idiomas LTR / RTL.

Una cadena (en algunos idiomas) es una matriz de caracteres, pero también podría ser cheques de pago o modificaciones de inventario. En un bucle que se mueve a través de estos, es posible que realice algunos cálculos que deberían ser los mismos, independientemente del orden en que los procese. Una prueba unitaria perfectamente cromulenta sería verificar si los cálculos se aplican de la misma manera en adelante o en retroceso. Esto podría ser trivialmente obvio para la adición, quizás no para otras operaciones más opacas.

    
respondido por el MatthewMartin 08.12.2010 - 22:10
1

Para compiladores?

Es divertido, pero la mayoría de los símbolos en un idioma comenzarán por un patrón común. No estoy hablando de la notación húngara aquí, pero si piensas en espacio de nombres / clases, muchos símbolos compartirán un prefijo .

myproject::SomeClass::GetFoo
myproject::SomeClass::GetBar

El problema es que, al realizar una búsqueda binaria, los prefijos comunes son lo peor con lo que puedes terminar, porque terminarás comparando esos prefijos una y otra vez.

Por otro lado, si miras las cuerdas hacia atrás, verás mucha más entropía. ¡Y luego, de repente, una búsqueda binaria (sobre un Trie) se vuelve mucho más poderosa!

Siempre me ha molestado que los nombres modificados de C ++ (por gcc) no se hayan invertido para poner el espacio de nombres ÚLTIMO :)

    
respondido por el Matthieu M. 09.12.2010 - 20:58
0

Cambio de vez en cuando los números de teléfono y ciertas cadenas para realizar búsquedas

    
respondido por el Don 08.12.2010 - 19:34
0

La única vez que puedo recordar que se usó la inversión de cadenas fue una función que vi desde hace mucho tiempo que la usé al analizar los nombres de los archivos, para garantizar que '.' Encontrado en el nombre del archivo fue de hecho el último punto que separó el nombre del archivo de la extensión. es decir, al analizar un nombre de archivo como data.2010.12.08.dat , invertiría la cadena, encontraría el primer punto, restaría esa posición del final de la cadena original y tomaría la subcadena. No estoy diciendo que esa sea la manera óptima de hacerlo, sino que es lo que hizo. Puede haber sido en powerbuilder, donde tales usos extraños de funciones eran comunes para solucionar varios problemas no obvios.

    
respondido por el GrandmasterB 08.12.2010 - 20:33
0

La única aplicación web real que vi usando strrev era almacenar contraseñas de usuario 'ilegibles' en la base de datos ...

Pero puedo recordar que hay un patrón en C para usar el strrev, tal vez se me ocurra más tarde.

    
respondido por el Rene 09.12.2010 - 10:47

Lea otras preguntas en las etiquetas