मैं एक ऐसा फ़ंक्शन बनाने की कोशिश कर रहा हूं जो इंडेक्स पास होने पर मुझे वर्णमाला स्थिति दे। यह वही होगा जैसे एक्सेल यह कॉलम दिखाता है। एक ... जेड, ए.ए., अटल बिहारी .... मैं की तरहबढ़ते वर्णमाला
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index <= alphabetsCount)
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
return string.Empty;
}
यह 'Z' जब तक ठीक काम करता है जेड तक परिणाम ऐसा लगता है कि प्राप्त करने के लिए नीचे दिए गए समारोह में लिखा था। अगर मैं 1 पास करता हूं तो यह 'ए' वापस लौटाता है और यदि मैं 2 पास करता हूं तो 'बी' वापस कर देता हूं। लेकिन, मैं यह समझने में सक्षम नहीं हूं कि जब मैं इस समारोह में 27 पास करता हूं तो मुझे एए कैसे प्राप्त होगा। मुझे लगता है मुझे इसे खोजने के लिए एक पुनरावर्ती विधि की आवश्यकता है।
इस समस्या के लिए कोई भी इनपुट बहुत अच्छा होगा!
संपादित
यह Tordek ने सुझाव दिया है। लेकिन उनका कोड 52, 78 इत्यादि जैसी संख्याओं में असफल हो जाएगा। इसके लिए वर्कअराउंड जोड़ा गया है और यहां अंतिम कामकाजी कोड है।
static string GetColumnName(int index)
{
const int alphabetsCount = 26;
if (index > alphabetsCount)
{
int mod = index % alphabetsCount;
int columnIndex = index/alphabetsCount;
// if mod is 0 (clearly divisible) we reached end of one combination. Something like AZ
if (mod == 0)
{
// reducing column index as index/alphabetsCount will give the next value and we will miss one column.
columnIndex -= 1;
// passing 0 to the function will return character '@' which is invalid
// mod should be the alphabets count. So it takes the last char in the alphabet.
mod = alphabetsCount;
}
return GetColumnName(columnIndex) + GetColumnName(mod);
}
else
{
int code = (index - 1) + (int)'A';
return char.ConvertFromUtf32(code);
}
}
ग्रेट।मेरा गणित जंगली है। तो मॉड्यूलो ऑपरेशन का पता नहीं लगा सका। कोड के लिए धन्यवाद। –