वर्णमाला में अक्षरों की एक सरणी उत्पन्न करना


91

वहाँ एक आसान तरीका है एक सरणी उत्पन्न करने के लिए वर्णमाला के अक्षरों में C #? इसे हाथ से करना बहुत कठिन नहीं है, लेकिन मैं सोच रहा था कि क्या ऐसा करने के लिए कोई रास्ता बनाया गया था।


FYI करें, यह सवाल अंतर्राष्ट्रीयकरण को ध्यान में रखते हुए पहले पूछा गया है।
सर्ज वेटियर

7
नहीं तो बस उन सवालों में से एक है जहां मैं सोचता था कि क्या कोई बेहतर तरीका था। :)
हेलेनी नोव


जवाबों:


193

मुझे नहीं लगता कि वहाँ एक तरह से बनाया गया है, लेकिन मुझे लगता है कि सबसे आसान होगा

  char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

7
यह अन्य अल्फाबेट्स पर भी काम करता है, जब तक आप स्ट्रिंग को रिसोर्स में रखते हैं :)
ओल्मो

1
यह सबसे अच्छा तरीका है यदि आप यह सुनिश्चित करना चाहते हैं कि आपका कोड विभिन्न भाषाओं वाली मशीनों पर काम करे। अन्यथा यदि आप अपने वर्णमाला को गतिशील रूप से उत्पन्न करते हैं (नीचे अन्य उत्तरों के रूप में) तो आप विभिन्न मशीनों पर एक अलग वर्णमाला के साथ समाप्त कर सकते हैं।
लुइस

यह विभिन्न भाषाओं के साथ कैसे काम करता है? क्या यह किसी तरह जादुई रूप से चिट्ठी पत्री, या पत्र अन्य भाषाओं को बनाएगा?
पावेल ऑडिओनोस

103

C # 3.0:

char[] az = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToArray();
foreach (var c in az)
{
    Console.WriteLine(c);
}

हाँ, यह काम करता है, भले ही Enumerable का एकमात्र अधिभार.रंग int मापदंडों को स्वीकार करता है; ;-)


'z' - 'a' + 1 = यह वास्तव में बहुत ही भद्दा लगता है, लेकिन मैं इसके आस-पास कोई रास्ता नहीं देख सकता :(
CasperT

String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));रिटर्न ABCDEFGHIJKLMNOPQRSTUVWXYZ;
अबिश्चेव

14
@ कैस्परट: संभवतःEnumerable.Range('a', 26)
abatishchev

यह उन भाषाओं के लिए काम नहीं करेगा जिनके पास ऐसे अक्षर हैं जिनके ASCII कोड 'a' - 'z' श्रेणी के बाहर हैं। आप ऐसे मामलों में इस पद्धति का उपयोग नहीं कर सकते। अच्छा समाधान अन्यथा।
मिशैल बी।


35
char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();

3
मुझे लगता है कि यह सबसे अच्छा समाधान है क्योंकि आप पूर्णांक और लोअरकेस अक्षरों की एक सरणी बनाने के लिए भी इस पद्धति का उपयोग कर सकते हैं। यह स्वीकृत उत्तर होना चाहिए :)
कपे

@PopCatalin के पास पहले सही उत्तर था, लेकिन यह वह तरीका है जिसके साथ मैं गया था। जो कुछ चल रहा है, उसका पालन करना थोड़ा आसान है, और यह जानकारी का एकमात्र टुकड़ा है कि आप जानते हैं कि वर्णमाला में 26 अक्षर ('ए' .. 'जेड') हैं, जो मुझे लगता है कि उचित है।
मास डॉट नेट

21

मैंने 1-आधारित सूचकांक के आधार पर एमएस एक्सेल कॉलम कोड (ए, बी, सी, ..., जेड, एए, एबी, ..., जेडजेड, एएए, एएबी, ...) प्राप्त करने के लिए यह लिखा था। (बेशक, शून्य-आधारित पर स्विच करना column--;शुरू में ही बंद हो रहा है ।)

public static String getColumnNameFromIndex(int column)
{
    column--;
    String col = Convert.ToString((char)('A' + (column % 26)));
    while (column >= 26)
    {
        column = (column / 26) -1;
        col = Convert.ToString((char)('A' + (column % 26))) + col;
    }
    return col;
}

2
ओह हे, बस के Convert.ToStringसाथ की जगह String.valueOfयह जावा में काम करता है :)
Nyerguds

1
GetIndexFromColumnName के बारे में कैसे?
oneiros

13

मान लें कि आप अंग्रेजी वर्णमाला के अक्षर ...

    for ( int i = 0; i < 26; i++ )
    {
        Console.WriteLine( Convert.ToChar( i + 65 ) );
    }
    Console.WriteLine( "Press any key to continue." );
    Console.ReadKey();

9
65 (हार्ड) कोडिंग के बजाय 'ए' का उपयोग करना बेहतर है। यह कोड को अधिक पठनीय और त्रुटियों के लिए कम प्रवण बना देगा।
मेहरदाद अफ़श्री

हालांकि, अग्रणी एन्कोडिंग में जहां 'ए'! = 65, (ईबीसीडीआईसी), ए से जेड तक अनुक्रमिक नहीं हैं।
जेम्स कर्रान

5
मेरे लिए एक सरणी की तरह नहीं दिखता है।
लाइटनेस दौड़ ऑर्बिट में

@MehrdadAfshari आंतरिक रूप से प्रयुक्त एन्कोडिंग अप्रासंगिक है। क्या है प्रासंगिक है कि प्रकार चार के मूल्यों यूनिकोड कोड अंक हैं, और उन AZ अनुक्रमिक हैं।
Nyerguds

8

आप इस तरह से कुछ कर सकते हैं, पात्रों के अस्सी के मूल्यों के आधार पर:

char[26] alphabet;

for(int i = 0; i <26; i++)
{
     alphabet[i] = (char)(i+65); //65 is the offset for capital A in the ascaii table
}

( यहां तालिका देखें ।) आप सिर्फ चरित्र के अंतर मूल्य से चरित्र मूल्य तक कास्ट कर रहे हैं - लेकिन, यह केवल अस्सी वर्णों के लिए काम करता है न कि विभिन्न भाषाओं आदि के लिए।

संपादित करें: जैसा कि मेहरदाद द्वारा एक समान समाधान के लिए टिप्पणी में सुझाया गया है , ऐसा करना बेहतर है:

alphabet[i] = (char)(i+(int)('A'));

यह A अक्षर को इंटिमेट करता है और फिर इसके आधार पर वेतन वृद्धि करता है, इसलिए यह हार्डकोड नहीं है।


इस कोड में एक छोटी सी त्रुटि है। i = 0 से <27 में 27 अक्षर (सरणी तत्व 0, फिर तत्व 1 से 26) शामिल हैं।
ब्रायन

आप इसे और भी बेहतर बना सकते हैं: वर्णमाला [i] = (चार) (i + 'A'); समान परिणाम
CasperT

1
यह नहीं होना चाहिए char[] alphabet = new char[26];?
शिशिर गुप्ता

5

ध्यान दें, स्ट्रिंग में एक ऑपरेटर होता है [] जो एक चार देता है, और एक है IEnumerable<char>, इसलिए अधिकांश उद्देश्यों के लिए, आप एक स्ट्रिंग का उपयोग चार [] के रूप में कर सकते हैं। अत:

string alpha = "ABCDEFGHIJKLMNOPQRSTUVQXYZ";
for (int i =0; i < 26; ++i)
{  
     Console.WriteLine(alpha[i]);
}

foreach(char c in alpha)
{  
     Console.WriteLine(c);
}

3

किसी ने उपज के समाधान का सुझाव नहीं दिया है:

public static IEnumerable<char> Alphabet()
{
    for (char letter = 'A'; letter <= 'Z'; letter++)
    {
        yield return letter;
    }
}

उदाहरण:

foreach (var c in Alphabet())
{
    Console.Write(c);
}

अच्छा है, लेकिन यह मूल रूप से एक forलूप लिखने का एक विचित्र तरीका है ।
Nyerguds

@ नायरगुड्स का मतलब अगर आप yield returnहिस्सा हैं, तो यह वास्तव में लूप के बराबर नहीं है। यह ऐसा है कि इसका उपयोग एक अनंत श्रृंखला आलसी को वापस करने के लिए किया जा सकता है।
2

नहीं, मेरा मतलब है कि आपके पास whileएक काउंटर है जो प्रत्येक मोड़ को बढ़ाता है और एक निश्चित मूल्य पर समाप्त होता है। यह वही है जो forप्रतिस्थापित करने के लिए डिज़ाइन किया गया था।
Nyerguds

मुझे पता है तुम्हारा क्या मतलब है। वहाँ एक पाश के लिए उपयोग कर सकते हैं। यह 4 साल पहले था, इसलिए मुझे समझाना मुश्किल था कि मैंने ऐसा क्यों नहीं किया!
वेस्टन


0
char alphaStart = Char.Parse("A");
char alphaEnd = Char.Parse("Z");
for(char i = alphaStart; i <= alphaEnd; i++) {
    string anchorLetter = i.ToString();
}

ऐसा लगता है कि आपने वर्णों के लिए सही उद्धरणों का उपयोग करना नहीं सीखा है। स्ट्रिंग से पार्स करने का कोई कारण नहीं है; सिर्फ char alphaStart = 'A';दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरण के साथ उपयोग करें।
Nyerguds

0
//generate a list of alphabet using csharp
//this recurcive function will return you
//a string with position of passed int
//say if pass 0 will return A ,1-B,2-C,.....,26-AA,27-AB,....,701-ZZ,702-AAA,703-AAB,...

static string CharacterIncrement(int colCount)
{
    int TempCount = 0;
    string returnCharCount = string.Empty;

    if (colCount <= 25)
    {
        TempCount = colCount;
        char CharCount = Convert.ToChar((Convert.ToInt32('A') + TempCount));
        returnCharCount += CharCount;
        return returnCharCount;
    }
    else
    {
        var rev = 0;

        while (colCount >= 26)
        {
            colCount = colCount - 26;
            rev++;
        }

        returnCharCount += CharacterIncrement(rev-1);
        returnCharCount += CharacterIncrement(colCount);
        return returnCharCount;
    }
}

//--------this loop call this function---------//
int i = 0;
while (i <>
    {
        string CharCount = string.Empty;
        CharCount = CharacterIncrement(i);

        i++;
    }

निश्चित स्वरूपण, लेकिन कोड अधूरा लगता है ( ifऔर whileकथनों पर एक नज़र डालें )
ओलिवर

1
वाह, कुछ सरल के लिए पुनरावृत्ति? आप एक साधारण समय के साथ, और 26 से विभाजित कर सकते हैं।
Nyerguds

0

कंसोल में अंग्रेजी वर्णमाला पाने के 4 तरीके:

public void ShowEnglishAlphabet()
{
    var firstLetter = 'a';
    var endLetter = 'z';
    for (var letter = firstLetter; letter <= endLetter; letter++)
    {
        Console.WriteLine($"{letter}-{letter.ToString().ToUpper()}");
    }
}

public void ShowEnglishAlphabetFromUnicodeTableDecNumber()
{
    var firstLetter = 97;
    var endLetter = 122;
    for (var letterNumberUnicodeTable = firstLetter; 
    letterNumberUnicodeTable <= endLetter; letterNumberUnicodeTable++)
    {
        Console.WriteLine($"{(char)letterNumberUnicodeTable}- 
        {((char)letterNumberUnicodeTable).ToString().ToUpper()}");
    }
}

public void ShowEnglishAlphabetUnicodeTableEscapeSequence()
{
    var firstLetter = '\u0061';
    var endLetter = '\u007A';
    for (var letterNumberUnicodeTable = firstLetter; 
    letterNumberUnicodeTable <= endLetter; letterNumberUnicodeTable++)
    {
        Console.WriteLine($"{letterNumberUnicodeTable}- 
        {letterNumberUnicodeTable.ToString().ToUpper()}");
    }
}   

public void ShowEnglishAlphabetUnicodeTableLinq()
{
    var alphabets = Enumerable.Range('a', 26).Select(letter => 
    ((char)letter).ToString()).ToList();
    foreach (var letter in alphabets)
    {
        Console.WriteLine($"{letter}-{letter.ToUpper()}");
    }
}

यहां तक ​​कि अगर यह एक समाधान है, तो कृपया इसके बारे में अधिक जानकारी प्रदान करें और यह क्या करता है।
जॉर्ज जेड।

0

दुर्भाग्य से कोई तैयार-उपयोग तरीका नहीं है।

आप उपयोग कर सकते हैं; char [] वर्ण = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .ToCharArray ();

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.