2011-08-19 20 views

Respuesta

13

Para convertir una cadena en un número entero, tome cada carácter uno por uno y si está en el rango '0' a '9', conviértalo a su equivalente decimal. Por lo general, eso es simplemente restar el valor del carácter de '0'. Ahora multiplica por 10 cualquier resultado anterior y agrega el nuevo valor. Repita hasta que no queden dígitos. Si había un signo negativo "-", invierta el resultado.

Para convertir un número entero en una cadena, comience invirtiendo el número si es negativo. Divida el número entero por 10 y guarde el resto. Convierta el resto en un carácter agregando el valor de carácter de '0'. Empuja esto al comienzo de la cadena; ahora repite con el valor que obtuviste de la división. Repita hasta que el valor dividido sea cero. Coloque un signo negativo '-' si el número comenzó negativo.

Aquí hay implementaciones concretas en Python, que en mi opinión es el lenguaje más cercano a pseudo-código.

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

Eso no es "su equivalente decimal" - está convirtiendo el carácter de dígito en un número. –

1

No lo llamaría un algoritmo per se, pero dependiendo del idioma implicará la conversión de caracteres en su equivalente integral. Muchos idiomas se detendrán en el primer carácter que no se puede representar como un entero (por ejemplo, la letra a), convertirán ciegamente todos los caracteres en su valor ASCII (por ejemplo, la letra a se convierte en 97) o ignorarán caracteres que no se pueden representar enteros y solo convertir los que pueden - o devolver 0/vaciar. Tienes que ser más específico en el marco/lenguaje para proporcionar más información.

1

cadena a entero:

muchos (la mayoría) idiomas representan cadenas, de alguna u otra manera, como una matriz (o lista) de caracteres, que también son enteros cortos. Asigna los valores correspondientes a los caracteres numéricos a su valor numérico. Por ejemplo, '0' en ascii está representado por 48. Por lo tanto, asigna 48 a 0, 49 a 1, y así sucesivamente a 9.

Comenzando por la izquierda, multiplica su total actual por 10, agregue el siguiente el valor del personaje, y seguir adelante. (Puede hacer un mapa más grande o más pequeño, cambiar el número por el que se multiplica en cada paso y convertir cadenas de cualquier base que desee)

Entero a la cadena es un proceso más largo que implica conversión de base a 10. Supongo que dado que la mayoría de los enteros tienen bits limitados (32 o 64, generalmente), usted sabe que llegará a un cierto número de caracteres como máximo en una cadena (20?). Así que puede configurar su propio sumador e iterar a través de cada lugar para cada bit después de calcular su valor (2^lugar).

Cuestiones relacionadas