A cosa serve l'inversione della stringa? [chiuso]

14

In PHP è strrev() , in Rails è .reverse , ma la maggior parte delle lingue non ha alcuna funzione di inversione delle stringhe. Alcuni hanno funzioni di allineamento inverso che possono essere usate sui personaggi. Stavo pensando che questo debba essere un grande svista, ma poi mi è venuto in mente, in cosa useresti la stringa inversa per ???

L'unica volta in cui posso pensare di averlo visto è nelle demo e nelle lezioni per trasformare "Hello World!" in "! dlroW olleH".

La mia domanda è; C'è un uso per invertire una stringa o è completamente inutile?

.

Addendum

Ci sono state molte più risposte che avevo previsto e non tutte erano del tutto accademiche. Avrei messo dei soldi che nessuno avrebbe potuto trovare un esempio legittimo. Inoltre, non pensavo che avrei imparato qualcosa di nuovo, ma la suggestione delle espressioni regolari di Mark Canlas è semplicemente geniale e non vedo l'ora che si dimostrerà. Grazie a tutti.

    
posta clockworkgeek 08.12.2010 - 18:11
fonte

16 risposte

17

Sexegers

A volte, i problemi che coinvolgono le espressioni regolari possono essere scritti più facilmente invertendo la stringa di input e affrontando il problema in un modo diverso.

Tecnica per gentile concessione dell'uomo che mi ha insegnato Perl.

Sexeger su PerlMonks

    
risposta data 08.12.2010 - 20:56
fonte
22

Bene, questa è una risposta ironica.

"Back in the day" Possedevo una scatola Unix, e aveva un file dizionario ordinato di parole inglesi, usato per il controllo ortografico.

Ho creato un nuovo file invertendo tutte le parole nel dizionario, ordinandolo e quindi invertendole di nuovo. Il risultato era un elenco di parole ordinate da destra a sinistra.

Quindi, se lo cercavi per una parola, accanto a quella parola sarebbero state parole con finali simili. Quindi è stato facile fare piccole poesie!

Puoi davvero divertirti quando vedi cosa fa rima con cosa.

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

Sono stato un programmatore / sviluppatore / sysadmin per ~ 10 anni e non riesco a ricordare ever che abbia bisogno di inversione della stringa in situazioni di vita reale.

L'unico caso di utilizzo immediato che posso pensare è la conversione di base dei numeri: fatto in modo ingenuo, la procedura restituisce una stringa invertita. Tuttavia, con un po 'di matematica, puoi calcolare in anticipo la quantità di spazio necessaria, in modo da poter iniziare a riempire il buffer dalla fine.

    
risposta data 08.12.2010 - 20:18
fonte
7

Interviste!

Invertire una stringa (sul posto o no) è una domanda di intervista molto comune per le conoscenze di programmazione di base. Una lingua priva di queste funzioni incorporate sarebbe difficile da intervistare. Il candidato dovrebbe effettivamente sapere qualcosa. 1

1: Questa è una risposta ironica.

    
risposta data 08.12.2010 - 20:47
fonte
6

Ho visto situazioni in cui un'applicazione desktop stava parlando con dispositivi embedded e stava cambiando costantemente l'endianness dell'ordine dei byte e i dati venivano spostati come stringhe. Questo è tutto per me però.

Non avrei usato le stringhe per quell'applicazione, ma questo era proprio così .....

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

Non è la soluzione migliore per offuscare un indirizzo email, dal momento che quando lo aggiungi agli appunti è ancora invertito. E, se diventasse popolare, verrebbe presto individuato tramite e-mail che graffia i bot.

Tuttavia, è suggerito .

    
risposta data 08.12.2010 - 19:07
fonte
5

ASCII non è la migliore codifica per le informazioni genetiche (puoi impacchettare i tipi di base ACGT come 2bits). Imballali in una serie di longlongs e ottieni 32 lettere "genetiche" per parola. DNA può essere capovolto, quindi devi controllare un pezzo di DNA contro entrambe le copie in avanti di una sequenza di test. Quindi essere in grado di invertire una stringa piena di quantità di 2 bit possibile essere molto utile per vari tipi di analisi genetiche.

Ho avuto come elemento su un punto di riferimento per le agenzie di spionaggio, quanto velocemente puoi invertire i bit di un long-long (in realtà una serie molto lunga di long-long). L'ovvio metodo di scambio di 2 bit alla volta è molto più lento dei metodi meno ovvi. Questi sono legati ad alcuni dei puliti algoritmi per la trasposizione dell'array in posto.

Tangurena:   L'operazione a cui fai riferimento è chiamata numero di abitanti. Desiderabili simili per i dati bit compressi sono in testa e in coda zero conteggio. Ci sono molte cose veramente belle quello che si può fare con i dati bit compressi. Una singola operazione su un lungo raggio è parallela a 64 km, quindi se sai cosa stai facendo puoi ottenere prestazioni incredibili per alcuni tipi di computazioni.

    
risposta data 08.12.2010 - 21:23
fonte
5

Qualunque cosa in cui lavorare con la stringa invertita è più facile.

Lavorare con gli interi come stringhe è molto più semplice se le stringhe sono invertite. Ho creato alcune funzioni di libreria per eseguire calcoli matematici con interi interi e inversione di stringhe utilizzata per semplificare le funzioni aritmetiche.

Certo, l'ho usato solo per ottenere risposte su Project Euler, ma ancora, la premessa originale vale.

    
risposta data 08.12.2010 - 22:01
fonte
3

Forse supporto multilingua a basso costo, per le lingue che usano le lettere da destra a sinistra (come l'arabo), invece che da sinistra a destra. Ovviamente devi stare attento ai caratteri accentati che modificano il personaggio giusto ...

    
risposta data 08.12.2010 - 22:20
fonte
2

Non so se qualcuno ha bisogno di controllare la palindrome ....

Non penso che sia completamente inutile, in quanto potrebbero esserci situazioni in cui è necessario essere in grado di invertire una stringa.

    
risposta data 08.12.2010 - 18:14
fonte
2

Nell'elaborazione e ampli in linguaggio naturale analizzando, a volte è più facile cercare una stringa dalla fine all'inizio. Una stringa inversa sarebbe utile per il debug o come metodo alternativo per scrivere il ciclo (invertire la stringa e quindi eseguire il ciclo dall'indice 0 a n-1).

Anche alcune lingue sono scritte da destra a sinistra, quindi è possibile utilizzare un'inversione di stringa per questo se ci si trova in un ambiente che non riconosce in modo nativo i linguaggi LTR / RTL.

Una stringa (in alcune lingue) è una matrice di caratteri, ma potrebbe anche essere una busta paga o una modifica dell'inventario. In un ciclo che si sposta su questi, è possibile che vengano eseguiti alcuni calcoli che dovrebbero essere uguali indipendentemente dall'ordine in cui vengono elaborati. Un test unitario perfettamente cromatico dovrebbe essere quello di verificare se i calcoli si applicano allo stesso modo andando avanti o indietro. Questo potrebbe essere banalmente ovvio per l'aggiunta, forse non per altre operazioni più opache.

    
risposta data 08.12.2010 - 22:10
fonte
1

Per i compilatori?

È divertente, ma la maggior parte dei simboli in una lingua inizierà con uno schema comune. Non sto parlando di Notazione ungherese qui, ma se pensi a namespace / classi, molti simboli condivideranno effettivamente un prefisso .

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

Il problema è che, quando si fa una ricerca binaria, i prefissi comuni sono la cosa peggiore che si può ottenere, perché finirai per confrontare questi prefissi più e più volte.

D'altra parte, se dai un'occhiata alle stringhe indietro, vedrai molta più entropia! E poi improvvisamente una ricerca binaria (su un Trie) diventa molto più potente!

Mi ha sempre infastidito il fatto che i nomi storpiati in C ++ (da gcc) non fossero invertiti per mettere lo spazio dei nomi ULTIMO:)

    
risposta data 09.12.2010 - 20:58
fonte
0

Ribalta di tanto in tanto i numeri di telefono e determinate stringhe per le ricerche

    
risposta data 08.12.2010 - 19:34
fonte
0

L'unica volta che riesco a ricordare di aver visto l'inversione delle stringhe è stata una funzione che ho visto da lontano che l'ha usata mentre analizzava i nomi dei file, per garantire che il '.' trovava nel nome del file era infatti l'ultimo punto che separava il nome del file dall'estensione. Ad esempio, analizzando un nome di file come data.2010.12.08.dat , devi invertire la stringa, trovare il primo punto, sottrarre quella posizione dalla fine della stringa originale e prendere la sottostringa. Non sto dicendo che è il modo migliore per farlo, ma questo è quello che ha fatto. Potrebbe essere stato in Powerbuilder, dove gli usi di queste strane funzioni erano comuni a risolvere vari problemi non ovvi.

    
risposta data 08.12.2010 - 20:33
fonte
0

L'unica vera app di worls che ho visto usando il rig è stata quella di memorizzare le password degli utenti 'illeggibili' nel database ...

Ma posso ricordare che c'è uno schema in C per usare lo strrev, forse lo inventerò più tardi.

    
risposta data 09.12.2010 - 10:47
fonte

Leggi altre domande sui tag