Para que você usa a reversão de string? [fechadas]

14

No PHP é strrev() , no Rails é .reverse , mas a maioria das linguagens não possui nenhuma função reversa de string. Alguns têm funções inversas de matriz que podem ser usadas em caracteres. Eu estava pensando que isso deve ser um grande descuido, mas então ocorreu-me, o que você realmente usa string reversa para ???

A única vez que posso pensar que o vi é em demonstrações e lições para ativar "Hello World!" em "! dlroW olleH".

Minha pergunta é; Existe um uso para reverter uma string ou é completamente inútil?

.

Adendo

Houve muito mais respostas que eu havia antecipado e nem todas eram inteiramente acadêmicas. Eu teria colocado dinheiro que ninguém poderia inventar um exemplo legítimo. Também não achei que aprenderia nada de novo, mas a sugestão de regex de Mark Canlas é simplesmente brilhante e estou ansiosa pela oportunidade de provar isso. Obrigado a todos.

    
por clockworkgeek 08.12.2010 / 18:11
fonte

16 respostas

17

Sexegers

Às vezes, os problemas que envolvem expressões regulares podem ser mais facilmente gravados com a string de entrada invertida e resolvendo o problema de uma maneira diferente.

Técnica cortesia do homem que me ensinou Perl.

Sexeger no PerlMonks

    
por 08.12.2010 / 20:56
fonte
22

Bem, esta é uma resposta irônica.

"De volta ao dia" Eu possuía uma caixa Unix e tinha um arquivo de dicionário ordenado de palavras em inglês, usado para verificação ortográfica.

Eu fiz um novo arquivo, invertendo todas as palavras do dicionário, classificando-as e, em seguida, invertendo-as novamente. O resultado foi uma lista de palavras classificadas da direita para a esquerda.

Então, se você procurar por uma palavra, ao lado dessa palavra, haverá palavras com finais semelhantes. Então foi fácil fazer pequenos poemas!

Você pode realmente se divertir quando vir o que rima com o quê.

    
por 08.12.2010 / 21:41
fonte
12
public bool IsPalindrome(string toCheck)
{
    return toCheck == toCheck.Reverse();
}
    
por 08.12.2010 / 18:15
fonte
12

Sou programador / programador / administrador de sistema há ~ 10 anos e não consigo me lembrar de sempre precisar de reversão de strings em situações da vida real.

O único caso de uso imediato em que consigo pensar é a conversão do número de base: feito ingenuamente, o procedimento retorna uma string invertida. No entanto, com um pouco de matemática, você pode computar antecipadamente a quantidade de espaço necessária, para que você possa começar a preencher o buffer a partir do final.

    
por 08.12.2010 / 20:18
fonte
7

Entrevistas!

Reverter uma string (no lugar ou não) é uma questão de entrevista muito comum para o conhecimento básico de programação. Uma linguagem sem essas funções embutidas seria difícil de entrevistar. O candidato teria que saber alguma coisa. 1

1: Esta é uma resposta irônica.

    
por 08.12.2010 / 20:47
fonte
6

Eu vi situações em que um aplicativo de área de trabalho estava conversando com dispositivos incorporados e estava constantemente alternando entre o endianness de ordem de bytes e os dados eram movidos como strings. Mas é sobre isso para mim.

Eu não usaria strings para esse aplicativo, mas é exatamente assim ...

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

Não é a melhor solução para ofuscar um endereço de e-mail, já que quando você o adiciona à área de transferência, ele ainda é revertido. E, se se tornasse popular, logo seria detectado por bots de raspagem de e-mail.

Ainda assim, foi sugerido .

    
por 08.12.2010 / 19:07
fonte
5

ASCII não é a melhor codificação para informação genética (você pode empacotar os tipos de base ACGT como 2bits). Embale-os em uma série de longlongs e você recebe 32 "carta" genética por palavra. DNA pode ser revertido, então você tem que checar um pedaço de DNA contra ambos os lados são cópias invertidas de uma sequência de teste. Então, ser capaz de reverter uma seqüência de 2 bits pode ser muito útil para vários tipos de análises genéticas.

Eu tive como um item de referência para as agências de espionagem, quão rápido você pode reverter os bits por um longo longo (na verdade, uma longa série de long-long). O método óbvio de trocar 2bits de cada vez é muito mais lento que os métodos menos óbvios. Estes estão relacionados com alguns dos algoritmos para transposição de matriz em vigor.

Tangurena:   A operação a que você se refere é chamada de contagem de população. Desejáveis semelhantes para dados com bit-pack estão levando e perdendo a contagem zero. Há muitas coisas realmente legais que se pode fazer com dados embalados em bits. Uma única operação em um longo período é paralela aos dados do 64way, portanto, se você souber o que está fazendo, poderá obter um desempenho incrível para determinados tipos de computações.

    
por 08.12.2010 / 21:23
fonte
5

Qualquer coisa em que trabalhar com a string invertida é mais fácil.

Trabalhar com inteiros como strings é muito mais fácil se as strings forem invertidas. Eu construí algumas funções de biblioteca para fazer matemática com números inteiros grandes e usei a reversão de string para tornar as funções aritméticas mais simples.

Com certeza, eu só usei isso para dar respostas ao Projeto Euler, mas ainda assim, a premissa original é válida.

    
por 08.12.2010 / 22:01
fonte
3

Talvez suporte multilíngüe de baixo custo, para idiomas que usam letras da direita para a esquerda (como árabe), em vez de da esquerda para a direita. É claro que você precisa ficar atento aos caracteres de acentuação que modificam o caractere correto ...

    
por 08.12.2010 / 22:20
fonte
2

Eu não sei, talvez alguém tenha uma necessidade ardente de verificar palindrome's ....

Eu não acho que seja completamente inútil, pois pode haver situações em que é necessário reverter uma string.

    
por 08.12.2010 / 18:14
fonte
2

Em processamento de linguagem natural & análise, às vezes é mais fácil pesquisar uma string do final ao início. Uma string reversa seria útil para depuração, ou como uma maneira alternativa de escrever o loop (inverter a string e depois fazer o loop do índice 0 para n-1).

Além disso, alguns idiomas são escritos da direita para a esquerda, portanto, um reversor de seqüência de caracteres pode ser usado para isso se você estiver em um ambiente que não reconheça nativamente idiomas LTR / RTL.

Uma string (em alguns idiomas) é uma matriz de caracteres, mas também pode ser contracheques ou modificações no inventário. Em um loop que se move entre eles, você pode fazer alguns cálculos que devem ser os mesmos, independentemente da ordem em que são processados. Um teste unitário perfeitamente cromulento seria verificar se os cálculos se aplicam da mesma maneira indo para frente ou retrocedendo. Isso pode ser trivialmente óbvio para a adição, talvez não para outras operações mais opacas.

    
por 08.12.2010 / 22:10
fonte
1

Para compiladores?

É divertido, mas a maioria dos símbolos em um idioma começa com um padrão comum. Eu não estou falando sobre a notação húngara aqui, mas se você pensar em namespace / classes, muitos símbolos realmente compartilharão um prefixo comum.

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

O problema é que, ao fazer uma pesquisa binária, os prefixos comuns são a pior coisa com a qual você pode acabar, porque você acabará comparando esses prefixos repetidamente.

Por outro lado, se você olhar as cordas para trás, verá muito mais entropia! E então, de repente, uma busca binária (sobre Trie) fica muito mais poderosa!

Sempre me incomodou que os nomes mutilados do C ++ (pelo gcc) não foram revertidos para colocar o namespace LAST:)

    
por 09.12.2010 / 20:58
fonte
0

Eu lanço os números de telefone e certas strings para pesquisas de tempos em tempos

    
por 08.12.2010 / 19:34
fonte
0

A única vez que me lembro de ter visto a reversão de string sendo usada, foi uma função que vi no caminho que a utilizava ao analisar nomes de arquivos, para garantir que o '.' Ele encontrou no nome do arquivo era de fato o último ponto que separava o nome do arquivo da extensão. isto é, analisando um nome de arquivo como data.2010.12.08.dat , você inverteria a string, localizaria o primeiro ponto, subtrairia essa posição do final da string original e pegaria a substring. Eu não estou dizendo que é a melhor maneira de fazer isso, mas é o que aconteceu. Pode ter sido no powerbuilder, onde tais usos estranhos de funções eram comuns para solucionar vários problemas não óbvios.

    
por 08.12.2010 / 20:33
fonte
0

O único aplicativo worls que vi usando o strrev era armazenar senhas de usuários 'ilegíveis' no banco de dados ...

Mas lembro-me que existe um padrão em C para usar o strrev, talvez eu venha depois.

    
por 09.12.2010 / 10:47
fonte