2011-08-19 15 views

risposta

13

Per convertire una stringa in un numero intero, prendere ciascun carattere a turno e se è compreso nell'intervallo da "0" a "9", convertirlo nel suo equivalente decimale. Di solito questo è semplicemente sottraendo il valore del carattere di '0'. Ora moltiplica i risultati precedenti per 10 e aggiungi il nuovo valore. Ripeti fino a quando non ci sono più cifre. Se c'era un segno meno "-", inverti il ​​risultato.

Per convertire un intero in una stringa, iniziare invertendo il numero se è negativo. Dividi il numero intero di 10 e salva il resto. Converti il ​​resto in un personaggio aggiungendo il valore del carattere '0'. Spingilo all'inizio della stringa; ora ripeti con il valore che hai ottenuto dalla divisione. Ripeti fino a quando il valore diviso è zero. Mostra un segno meno "-" se il numero è negativo.

Qui ci sono implementazioni concrete in Python, che a mio parere è la lingua più vicina allo pseudo-codice.

def string_to_int(s): 
    i = 0 
    sign = 1 
    if s[0] == '-': 
     sign = -1 
     s = s[1:] 
    for c in s: 
     if not ('0' <= c <= '9'): 
      raise ValueError 
     i *= 10 
     i += ord(c) - ord('0') 
    i *= sign 
    return i 

def int_to_string(i): 
    s = '' 
    sign = '' 
    if i < 0: 
     sign = '-' 
     i = -i 
    while True: 
     remainder = i % 10 
     i = i/10 
     s = chr(ord('0') + remainder) + s 
     if i == 0: 
      break 
    s = sign + s 
    return s 
+0

Questo non è "il suo equivalente decimale" - sta convertendo il carattere numerico in un numero. –

1

Non lo chiamerei un algoritmo di per sé, ma a seconda della lingua implicherà la conversione di caratteri nel loro equivalente integrale. Molte lingue si fermeranno sul primo carattere che non può essere rappresentato come un intero (ad esempio la lettera a), convertiranno ciecamente tutti i caratteri nel loro valore ASCII (ad esempio la lettera a diventa 97) o ignoreranno i caratteri che non possono essere rappresentati come numeri interi e converti solo quelli che possono - o restituire 0/vuoto. Devi ottenere più specifiche sulla struttura/lingua per fornire maggiori informazioni.

1

stringa a intero:

molti (la maggior parte) lingue rappresentano le stringhe, ad un certo livello o di un altro, come un array (o lista) dei personaggi, che sono anche brevi interi. Mappare quelli corrispondenti ai caratteri numerici al loro valore numerico. Ad esempio, '0' in ascii è rappresentato da 48. Quindi mappa da 48 a 0, da 49 a 1 e così via a 9.

Partendo da sinistra, moltiplica il totale corrente di 10, aggiungi il successivo valore del personaggio e andare avanti. (Puoi creare una mappa più grande o più piccola, cambiare il numero moltiplicato per ogni passaggio e convertire le stringhe di qualsiasi base.)

Il numero intero di stringhe è un processo più lungo che implica la conversione di base in 10. Suppongo che poiché la maggior parte degli interi ha bit limitati (32 o 64, di solito), si sa che arriverà a un certo numero di caratteri al massimo in una stringa (20?). In questo modo è possibile impostare il proprio sommatore e scorrere ogni punto per ogni bit dopo aver calcolato il suo valore (2^posizione).

Problemi correlati