char

2011-01-03 15 views
15

की वृद्धि में मुझे कुछ सवाल पूछा गया कि चार 'बी' को 'सी' और फिर 'डी' वापस करने के लिए कैसे कहा जाए। जवाब काफी जटिल थे और अधिकतर ओवरकिल थे।char

char X='A'; 
X++ 

संपादित करें:

बस इस क्यों नहीं उपयोग करने के लिए यह एक से जेड और आगे क्या करने के लिए चला जाता है?

उत्तर

19

यदि आप जो परिणाम देते हैं उससे खुश हैं, तो यह ठीक है।

आमतौर पर जब मैंने इस तरह के प्रश्न देखे हैं, तो वे "ज़ेड" से "एए" या कुछ ऐसा करना चाहते हैं जैसे कि एक्सेल कॉलम। स्पष्ट रूप से सिर्फ एक char बढ़ाने से ऐसा नहीं होगा - यह '[' पर जाएगा।

वैकल्पिक रूप से, यहां तक ​​कि एक ही चरित्र के भीतर, मान्य मानों की सीमा गैर-संगत हो सकती है - स्पष्ट उदाहरण हेक्स है। यदि आप '9' में वृद्धि करते हैं तो आपको 'ए' या 'ए' के ​​बजाय ':' मिलता है जिसे आप शायद चाहते थे। वांछित आदेश शायद ही कभी "जो भी यूनिकोड आपको देता है" है।

1

शायद क्योंकि यह ज़ेड से एए, अला पर्ल और PHP तक जाने का भी इरादा है।

28

तुम सिर्फ बढ़ाने के लिए करना चाहते हैं: अगर आप चाहते हैं स्तंभ की तरह एक एक्सेल,

Char x = 'A'; 
Char y = (Char)(Convert.ToUInt16(x) + 1); 

लेकिन:

// (1 = A, 2 = B...27 = AA...703 = AAA...) 
    public static string GetColNameFromIndex(int columnNumber) 
    { 
     int dividend = columnNumber; 
     string columnName = String.Empty; 
     int modulo; 

     while (dividend > 0) 
     { 
      modulo = (dividend - 1) % 26; 
      columnName = Convert.ToChar(65 + modulo).ToString() + columnName; 
      dividend = (int)((dividend - modulo)/26); 
     } 

     return columnName; 
    } 

    // (A = 1, B = 2...AA = 27...AAA = 703...) 
    public static int GetColNumberFromName(string columnName) 
    { 
     char[] characters = columnName.ToUpperInvariant().ToCharArray(); 
     int sum = 0; 
     for (int i = 0; i < characters.Length; i++) 
     { 
      sum *= 26; 
      sum += (characters[i] - 'A' + 1); 
     } 
     return sum; 
    } 
+2

क्यों इतना मुश्किल? एक्स ++ अच्छी तरह से काम करता है – Loj

+1

मुझे एक चर पर ++ पसंद नहीं है, यह सब ^^ और ए = 65, जेड = 90 ए = 9 7, जेड = 122 जैसा कि आप चाहते हैं कि एक चार ++ आपको केवल अक्षरों को नहीं देता है, लेकिन प्रतीकों जैसे [^ ¨,; तो, यदि आप पत्र चाहते हैं, तो आपको सीमा को सीमित करना होगा। यदि आप चाहते हैं कि एक्सेल कॉलम नाम, कोड जो मैं ऊपर देता हूं। – kerrubin

+0

हां मुझे पता है, लेकिन मैं केवल उनमें से 30 का उपयोग कर रहा हूं इसलिए मुझे लगता है कि यह काम करना चाहिए। सावधान रहो – Loj

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