No PHP strrev()
, no Rails .reverse
, mas a maioria das linguagens não possui nenhuma função de reversão de string. Alguns possuem funções de inversão de matriz que podem ser usadas em caracteres. Eu estava pensando que isso deve ser uma grande fiscalização, mas então me ocorreu: para que você realmente usaria o reverse reverse?
A única vez que posso pensar que já vi isso é em demos e lições para virar "Olá Mundo!" em "! dlroW olleH".
Minha pergunta é; Existe um uso para reverter uma string ou é completamente inútil?
.
Termo aditivo
Havia muito mais respostas que eu previra e nem todas eram inteiramente acadêmicas. Eu teria apostado que ninguém poderia inventar um exemplo legítimo. Também não achei que fosse aprender algo novo, mas a sugestão de regex de Mark Canlas é simplesmente brilhante e aguardo com expectativa a oportunidade de provar a si mesma. Obrigado a todos.
fonte
a ^= b; b ^= a; a ^= b;
Respostas:
Sexegers
Às vezes, problemas que envolvem expressões regulares podem ser escritos com mais facilidade, revertendo a string de entrada e resolvendo o problema de uma maneira diferente.
Técnica cortesia do homem que me ensinou Perl.
Sexeger em PerlMonks
fonte
Bem, esta é uma resposta explícita.
"Antigamente" eu possuía uma caixa Unix, e ela tinha um arquivo de dicionário ordenado de palavras em inglês, usado para verificação ortográfica.
Criei um novo arquivo revertendo todas as palavras do dicionário, classificando-as e depois revertendo-as novamente. O resultado foi uma lista de palavras classificadas da direita para a esquerda.
Portanto, se você pesquisasse uma palavra, ao lado dela haveriam palavras com finais semelhantes. Então foi fácil fazer pequenos poemas!
Você pode realmente se divertir quando vê o que rima com o quê.
fonte
Tenho sido um codificador / programador / sysadmin para ~ 10 anos e não me lembro sempre precisando de reversão corda em situações da vida real.
O único caso de uso imediato em que consigo pensar é na conversão de base numérica: feito de forma ingênua, o procedimento retorna uma string invertida. No entanto, com um pouco de matemática, você pode calcular antecipadamente a quantidade de espaço necessária, para poder começar a preencher o buffer a partir do final.
fonte
memmove
até o início quando terminar. Provavelmente é mais barato do que calcular log (n) / log (base) para calcular o número de dígitos necessários.fonte
0
den/2
e comparar o personagem na extremidade oposta.while ( (*p == *q) && (p <= q) {p++; q--} return p > q;
em C e outros idiomas dos ponteiros.Entrevistas!
A reversão de uma string (no lugar ou não) é uma pergunta de entrevista muito comum para conhecimentos básicos de programação. Seria difícil entrevistar um idioma sem essas funções integradas. O candidato realmente teria que saber alguma coisa. 1
1: Esta é uma resposta explícita.
fonte
Vi situações em que um aplicativo de desktop conversava com dispositivos incorporados e alternava constantemente a ordem de bytes e os dados eram movidos como strings. Mas é sobre isso para mim.
Eu não teria usado seqüências de caracteres para esse aplicativo, mas é assim que era ...
fonte
Não é a melhor solução para ofuscar um endereço de e-mail, pois quando você o adiciona à área de transferência, ele ainda é revertido. E, se se tornasse popular, logo seria detectado por e-mail raspando bots.
Ainda assim, foi sugerido .
fonte
ASCII não é a melhor codificação para informações genéticas (você pode incluir os tipos de base ACGT como 2 bits). Empacote-os em uma série de longos e você receberá 32 "letras" genéticas por palavra. O DNA pode ser revertido, então você deve verificar um pedaço de DNA em ambos os lados, cópias reversas de uma sequência de teste. Portanto, ser capaz de reverter uma sequência compactada de quantidades de 2 bits pode ser muito útil para vários tipos de análises genéticas.
Eu tinha como item de referência para agências de espionagem, com que rapidez você pode reverter os bits por muito tempo (na verdade, uma variedade muito longa de longos). O método óbvio de trocar 2 bits por vez é muito mais lento que os métodos menos óbvios. Eles estão relacionados a alguns dos algoritmos puros para a transposição de matriz no local.
Tangurena: A operação a que você se refere é chamada de contagem da população. Desejáveis semelhantes para dados compactados em bits estão levando e contando zero. Há muitas coisas realmente legais que se pode fazer com dados compactados em bits. Uma única operação em um longo período é paralela aos dados de 64 vias; portanto, se você souber o que está fazendo, poderá obter um desempenho incrível para certos tipos de computação.
fonte
Qualquer coisa em que trabalhar com a sequência invertida é mais fácil.
Trabalhar com números inteiros como seqüências de caracteres é muito mais fácil se elas forem revertidas. Criei algumas funções de biblioteca para fazer matemática com números inteiros grandes e usei a reversão de cadeias para simplificar as funções aritméticas.
É verdade que só o usei para dar respostas ao Projeto Euler, mas ainda assim, a premissa original é válida.
fonte
Talvez suporte multilíngue de baixo custo, para idiomas que usam letras da direita para a esquerda (como o árabe), em vez da esquerda para a direita. Claro que você deve ter cuidado com os caracteres acentuados que modificam o caractere certo ...
fonte
Não sei, talvez alguém tenha uma necessidade ardente de procurar palíndromos ...
Não acho que seja completamente inútil, pois pode haver situações em que é preciso ser capaz de reverter uma string.
fonte
No processamento e análise de linguagem natural, às vezes é mais fácil pesquisar uma string do fim ao começo. Um reverso de string seria útil para depuração ou como uma maneira alternativa de escrever o loop (inverta o string e depois faça um loop do índice 0 ao n-1).
Além disso, alguns idiomas são escritos da direita para a esquerda, portanto, um inversor de string pode ser usado para isso se você estiver em um ambiente que não reconheça nativamente os idiomas LTR / RTL.
Uma string (em alguns idiomas) é uma matriz de caracteres, mas também pode ser contracheques ou modificações de inventário. Em um loop que se desloca entre eles, você pode fazer alguns cálculos que devem ser os mesmos, independentemente da ordem em que você os processa. Um teste de unidade perfeitamente cromulento seria verificar se os cálculos se aplicam da mesma forma para a frente ou para trás. Isso pode ser trivialmente óbvio para adição, talvez não para outras operações mais opacas.
fonte
Para compiladores?
É divertido, mas a maioria dos símbolos em um idioma começará por um padrão comum. Não estou falando sobre notação húngara aqui, mas se você pensar em namespace / classes, muitos símbolos realmente compartilharão um prefixo comum .
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ê comparará esses prefixos repetidamente.
Por outro lado, se você olhar as cordas para trás, verá muito mais entropia! E, de repente, uma pesquisa binária (sobre um Trie) fica muito mais poderosa!
Sempre me incomodou que os nomes desconfigurados do C ++ (por gcc) não fossem revertidos para colocar o namespace LAST :)
fonte
Inverto números de telefone e algumas sequências para pesquisas de tempos em tempos
fonte
A única vez em que me lembro de ter sido usada a reversão de cadeia de caracteres foi uma função que vi no passado, quando a utilizava ao analisar nomes de arquivos, para garantir que o '.' encontrado no nome do arquivo foi de fato o último ponto que separou o nome do arquivo da extensão. ou seja, ao analisar um nome de arquivo
data.2010.12.08.dat
, você inverte a string, encontra o primeiro ponto, subtrai essa posição do final da string original e pega a substring. Não estou dizendo que é a maneira ideal de fazê-lo, mas foi o que ele fez. Pode ter sido no powerbuilder, onde esses usos estranhos de funções eram comuns para solucionar vários problemas não óbvios.fonte
O único aplicativo de worls reais que eu vi usando o strrev era armazenar senhas de usuário 'ilegíveis' no banco de dados ...
Mas eu lembro que existe um padrão em C para usar o strrev, talvez eu o invente depois.
fonte