বর্ণমালায় অক্ষরের একটি অ্যারে তৈরি করা হচ্ছে


92

C # তে বর্ণমালার অক্ষর সম্বলিত একটি অ্যারে তৈরি করার কী সহজ উপায় আছে? এটি হাতে হাতে করা খুব কঠিন নয়, তবে আমি ভাবছিলাম যে এটি করার মতো কোনও বিল্ট আছে কিনা।


এফওয়াইআই, আন্তর্জাতিকীকরণের বিষয়টি মাথায় রেখেই এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল
সার্জ ওয়াটিয়ার

7
না, এই প্রশ্নগুলির মধ্যে কেবল একটি যেখানে আমি ভাবছিলাম যে এর চেয়ে আরও ভাল উপায় আছে কিনা। :)
হেলিফ্যান্ট


বিপরীতটি এখানে পাওয়া যাবে stackoverflow.com/a/667902/2343
সমীর আলিভাই

উত্তর:


197

আমি মনে করি না যে সেখানে কোনও বিল্ট ইন আছে, তবে আমি মনে করি সবচেয়ে সহজ হবে

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

7
এটি অন্যান্য বর্ণমালাগুলিতেও কাজ করে, যতক্ষণ আপনি রিসোর্সে স্ট্রিং
ওলমো

4
আপনার কোডটি বিভিন্ন ভাষা নিয়ে মেশিনে কাজ করে তা নিশ্চিত করতে চাইলে এটি সর্বোত্তম উপায়। অন্যথায় আপনি যদি আপনার বর্ণমালা গতিশীলভাবে উত্পন্ন করেন (নীচের অন্যান্য উত্তর হিসাবে) আপনি বিভিন্ন মেশিনে একটি ভিন্ন বর্ণমালা দিয়ে শেষ করতে পারেন।
লুইস

এটি বিভিন্ন ভাষার সাথে কীভাবে কাজ করে? এতে কি কোনওভাবে যাদুকরীভাবে চাইনস চিঠি থাকবে, বা চিঠিগুলি অন্য ভাষা তৈরি করবে?
পাউয়ে অডিওনিসোস

104

সি # 3.0:

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

হ্যাঁ এটি কেবলমাত্র গণ্যমানের ওভারলোডের কাজ করে। রেঞ্জ ইন্ট প্যারামিটারগুলি গ্রহণ করে ;-)


'z' - 'a' + 1 = এটি দেখতে কেবল আনাড়ি মনে হলেও এর চারপাশের কোনও রাস্তা দেখতে পাচ্ছি না :(
ক্যাস্পারটি

String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));প্রত্যাবর্তন ABCDEFGHIJKLMNOPQRSTUVWXYZ;
আবাতিশ্চেভ

15
@ ক্যাস্পারটি: সম্ভবতEnumerable.Range('a', 26)
আবাতিশেভ

এটি এমন ভাষাগুলির পক্ষে কাজ করবে না যেগুলির অক্ষর রয়েছে যাদের ASCII কোডগুলি 'a' - 'z' এর সীমার বাইরে পড়ে। আপনি এই ক্ষেত্রে এই পদ্ধতিটি ব্যবহার করতে পারবেন না। অন্যথায় ভাল সমাধান।
মাইকেল বি।


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

4
আমি মনে করি এটি সেরা সমাধান কারণ আপনি এই পদ্ধতিটি পূর্ণসংখ্যার এবং ছোট হাতের অক্ষরের অ্যারে তৈরির জন্যও ব্যবহার করতে পারেন। এটি গ্রহণযোগ্য উত্তর হওয়া উচিত :)
কাপে

@ পপগ্যাটালিনের প্রথমে সঠিক উত্তর ছিল তবে আমি যে পদ্ধতির সাথে চলেছি এটি এটি। যা চলছে তা অনুসরণ করা কিছুটা সহজ, এবং এটির একমাত্র টুকরো তথ্য যা আপনাকে মনে করে তা হ'ল বর্ণমলে 26 টি অক্ষর ('এ' .. 'জেড') থাকে, যা আমি বিশ্বাস করি যে যুক্তিসঙ্গত।
ভর ডট নেট

22

আমি 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;
}

4
ওহ হেই, শুধু প্রতিস্থাপন Convert.ToStringসঙ্গে String.valueOfকরে তোলে জাভা কাজ :)
Nyerguds

4
কীভাবে getIndexFrom ColumnName সম্পর্কে?
oneiros

14

ধরে নিচ্ছি আপনি ইংরেজি বর্ণমালার অক্ষর বোঝাচ্ছেন ...

    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, (ইবিসিডিআইসি), এ থেকে জেড ক্রমিক নয়।
জেমস কারান

4
আমার কাছে অ্যারের মতো দেখাচ্ছে না।
অরবিটে হালকা ঘোড়দৌড়

@ মেহরদাদআফশারি অভ্যন্তরীণভাবে ব্যবহৃত এনকোডিং অপ্রাসঙ্গিক। কি হয় প্রাসঙ্গিক যে টাইপ চর মান ইউনিকোড কোড পয়েন্ট, এবং সেই জেড অনুক্রমিক হয়।
নায়ারগডস

8

আপনি অক্ষরের ascii মানগুলির উপর ভিত্তি করে এমন কিছু করতে পারেন:

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
}

( এখানে টেবিলটি দেখুন )) আপনি কেবলমাত্র অক্ষরের ইনট মান থেকে চরিত্রের মানতে কাস্ট করছেন - তবে, এটি কেবল ভিন্ন ভাষাগুলি নয়, এএসসিআই অক্ষরের জন্য কাজ করে etc.

সম্পাদনা: অনুরূপ সমাধানের মন্তব্যে মেহরদ্দদের পরামর্শ অনুসারে এটি করা ভাল:

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

এটি A চরিত্রটিকে এর মান হিসাবে এবং তারপরে এটিগুলির উপর ভিত্তি করে ইনক্রিমেন্ট যুক্ত করে, তাই এটি হার্ডকোডযুক্ত নয়।


এই কোডটিতে একটি সামান্য ত্রুটি রয়েছে। i = 0 থেকে <27 এর মধ্যে 27 টি অক্ষর রয়েছে (অ্যারের উপাদান 0, তারপরে উপাদান 1 থেকে 26)।
ব্রায়ান

আপনি এটিকে আরও উন্নত করতে পারেন: বর্ণমালা [i] = (চর) (i + 'এ'); একই ফলাফল
ক্যাস্পারটি

4
এটা করা উচিত নয় 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লুপ লেখার একটি উদ্ভট উপায় ।
নাইয়ারগডস

@ নাইয়ারগডস যদি আপনি yield returnঅংশটি বোঝায় তবে এটি লুপের জন্য আসলেই সমতুল্য নয়। এটি এমন যে এটি অবিরাম সিরিজটি অলসভাবে ফেরত দিতে ব্যবহার করা যেতে পারে।
ওয়েস্টন

না, আমি বলতে চাইছি আপনার whileসাথে একটি পাল্টা রয়েছে যা প্রতিটি পালা বৃদ্ধি করে এবং একটি নির্দিষ্ট মান হিসাবে শেষ হয়। ঠিক এটিই forপ্রতিস্থাপনের জন্য ডিজাইন করা হয়েছিল।
নাইয়ারগডস

আমি বুঝছি তুমি কি বলতে চাও. সেখানে লুপের জন্য একটি ব্যবহার করতে পারে। এটি 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';ডাবল কোটের পরিবর্তে একক উদ্ধৃতি সহ কেবল ব্যবহার করুন ।
নাইয়ারগডস

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বিবৃতিগুলি দেখুন)
অলিভার

4
ওহ, সহজ কিছু জন্য পুনরাবৃত্তি? আপনি এটি একটি সহজ সময় এবং 26 দ্বারা বিভাজন দিয়ে করতে পারেন
নায়ারগডস

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

দুর্ভাগ্যক্রমে কোনও ব্যবহারের জন্য প্রস্তুত উপায় নেই।

তুমি ব্যবহার করতে পার; চর [] অক্ষর = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"। টোকচারআরে ();

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.