2011-08-19 10 views
8

कई भाषाओं में स्ट्रिंग को पूर्णांक में परिवर्तित करने के लिए कार्य करता है और इसके विपरीत। तो वहां क्या होता है? रूपांतरण के दौरान क्या एल्गोरिदम निष्पादित किया जा रहा है?कैसे कंपाइलर पूर्णांक को स्ट्रिंग में परिवर्तित कर रहा है और इसके विपरीत

मैं विशिष्ट भाषा में नहीं पूछता क्योंकि मुझे लगता है कि यह उन सभी में समान होना चाहिए।

उत्तर

13

स्ट्रिंग को एक पूर्णांक में बदलने के लिए, प्रत्येक वर्ण को बदले में ले जाएं और यदि यह '0' के माध्यम से '9' के बीच है, तो इसे अपने दशमलव समकक्ष में परिवर्तित करें। आमतौर पर यह '0' के चरित्र मान को घटाता है। अब किसी भी पिछले परिणाम 10 से गुणा करें और नया मान जोड़ें। तब तक दोहराएं जब तक कोई अंक नहीं छोड़ा जाता है। यदि कोई अग्रणी '-' ऋण चिह्न था, तो परिणाम को उलटा करें।

एक स्ट्रिंग में एक पूर्णांक को परिवर्तित करने के लिए, यदि यह ऋणात्मक है तो संख्या को परिवर्तित करके प्रारंभ करें। 10 से पूर्णांक विभाजित करें और शेष को बचाएं। '0' के वर्ण मान को जोड़कर शेष को एक वर्ण में कनवर्ट करें। स्ट्रिंग की शुरुआत में इसे पुश करें; अब विभाजन से प्राप्त मूल्य के साथ दोहराना। विभाजित मान शून्य होने तक दोहराएं। यदि संख्या नकारात्मक हो गई तो एक प्रमुख '-' ऋण चिह्न डालें।

यहां पाइथन में ठोस कार्यान्वयन हैं, जो मेरी राय में छद्म कोड के निकट भाषा है।

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

यह "इसके दशमलव समतुल्य" नहीं है - यह अंक वर्ण को एक संख्या में परिवर्तित कर रहा है। –

1

मैं इसे एल्गोरिदम प्रति से पर नहीं कहूंगा, लेकिन भाषा के आधार पर इसमें पात्रों के रूपांतरण को उनके अभिन्न समकक्ष में शामिल किया जाएगा। कई भाषाएं पहले अक्षर पर रुक जाएंगी जिन्हें पूर्णांक (उदाहरण पत्र a) के रूप में प्रदर्शित नहीं किया जा सकता है, सभी अंधाधुंधों को उनके ASCII मान में अंधाधुंध रूपांतरित कर देगा (उदाहरण पत्र a97 बन जाता है), या ऐसे वर्णों को अनदेखा कर देगा जिन्हें प्रदर्शित नहीं किया जा सकता पूर्णांक और केवल उन लोगों को रूपांतरित करें जो कर सकते हैं - या 0/खाली लौटा सकते हैं। अधिक जानकारी प्रदान करने के लिए आपको ढांचे/भाषा पर अधिक विशिष्ट होना होगा।

1

स्ट्रिंग पूर्णांक:

कई (सबसे) भाषाओं, तार प्रतिनिधित्व करते हैं कुछ स्तर या किसी अन्य पर अक्षर है, जो भी कम पूर्णांक हैं की एक सरणी (या सूची) के रूप में। संख्या वर्णों के अनुरूप उनके संख्या मूल्य पर मानचित्र करें। उदाहरण के लिए, एसीआई में '0' 48 का प्रतिनिधित्व करता है। इसलिए आप 48 से 0, 49 से 1 तक और 9 .

बाईं ओर से शुरू करते हुए, आप अपने वर्तमान कुल को 10 से गुणा करते हैं, अगला जोड़ें चरित्र का मूल्य, और आगे बढ़ें। (आप एक बड़ा या छोटा नक्शा बना सकते हैं, प्रत्येक चरण में गुणा करके उस नंबर को बदल सकते हैं, और अपनी पसंद के किसी भी आधार के स्ट्रिंग को कन्वर्ट कर सकते हैं।)

स्ट्रिंग के लिए पूर्णांक एक लंबी प्रक्रिया है जिसमें आधार रूपांतरण 10 शामिल है। मुझे लगता है कि चूंकि अधिकांश पूर्णांकों में सीमित बिट्स (32 या 64, आमतौर पर) होते हैं, तो आप जानते हैं कि यह स्ट्रिंग (20?) में सबसे अधिक वर्णों की एक निश्चित संख्या में आ जाएगा। तो आप अपने मूल्य (2^स्थान) की गणना के बाद प्रत्येक बिट के लिए प्रत्येक स्थान के माध्यम से अपना स्वयं का योजक सेट कर सकते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे