2011-08-19 37 views

Trả lời

13

Để chuyển đổi chuỗi thành số nguyên, hãy tính từng ký tự và nếu nó nằm trong phạm vi '0' đến '9', hãy chuyển đổi nó thành số thập phân tương đương. Thông thường chỉ đơn giản là trừ giá trị ký tự của '0'. Bây giờ nhân bất kỳ kết quả trước đó bằng 10 và thêm giá trị mới. Lặp lại cho đến khi không còn chữ số nào. Nếu có dấu trừ '-' dẫn đầu, đảo ngược kết quả.

Để chuyển đổi một số nguyên thành chuỗi, hãy bắt đầu bằng cách đảo ngược số nếu nó là số âm. Chia số nguyên cho 10 và lưu phần còn lại. Chuyển đổi phần còn lại thành một ký tự bằng cách thêm giá trị ký tự của '0'. Đẩy điều này vào đầu chuỗi; bây giờ lặp lại với giá trị mà bạn thu được từ bộ phận. Lặp lại cho đến khi giá trị được chia bằng không. Đặt ra dấu trừ '-' hàng đầu nếu số đó bắt đầu âm.

Dưới đây là các triển khai cụ thể trong Python, theo ý kiến ​​của tôi là ngôn ngữ gần nhất với mã giả.

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

Đó không phải là "số thập phân tương đương" - nó chuyển đổi ký tự chữ số thành một số. –

1

Tôi sẽ không gọi nó là một thuật toán mỗi se, nhưng tùy thuộc vào ngôn ngữ, nó sẽ liên quan đến việc chuyển đổi các ký tự thành số nguyên tương đương. Nhiều ngôn ngữ sẽ dừng lại trên ký tự đầu tiên không thể được biểu diễn dưới dạng số nguyên (ví dụ: a), sẽ chuyển đổi một cách mù quáng tất cả các ký tự thành giá trị ASCII của chúng (ví dụ: a trở thành 97) hoặc sẽ bỏ qua các ký tự không thể đại diện số nguyên và chỉ chuyển đổi số nguyên có thể - hoặc trả về 0/trống. Bạn cần phải cụ thể hơn về khuôn khổ/ngôn ngữ để cung cấp thêm thông tin.

1

String để số nguyên:

Nhiều (hầu hết) ngôn ngữ biểu diễn các chuỗi, ở một mức độ nào đó, như là một mảng (hoặc danh sách) của nhân vật, mà còn là các số nguyên ngắn. Ánh xạ những cái tương ứng với các ký tự số với giá trị số của chúng. Ví dụ: '0' trong ascii được đại diện bởi 48. Vì vậy, bạn ánh xạ 48 đến 0, 49 đến 1, v.v. 9.

Bắt đầu từ bên trái, bạn nhân tổng số hiện tại của mình với 10, thêm tiếp theo giá trị của ký tự và tiếp tục. (Bạn có thể tạo một bản đồ lớn hơn hoặc nhỏ hơn, thay đổi số bạn nhân với từng bước và chuyển đổi các chuỗi của bất kỳ cơ sở nào bạn muốn.)

Integer to string là một quá trình dài hơn liên quan đến chuyển đổi cơ bản thành 10. Tôi cho rằng vì hầu hết các số nguyên có bit giới hạn (32 hoặc 64, thường), bạn biết rằng nó sẽ đến một số lượng ký tự nhất định trong một chuỗi (20?). Vì vậy, bạn có thể thiết lập trình bổ sung của riêng bạn và lặp qua từng vị trí cho từng bit sau khi tính toán giá trị của nó (2^địa điểm).

Các vấn đề liên quan