알파벳 문자 배열 생성


92

C #에서 알파벳 문자를 포함하는 배열을 생성하는 쉬운 방법이 있습니까? 손으로하는 것은 그리 어렵지 않지만 이렇게 할 수있는 방법이 있는지 궁금합니다.


참고 로이 질문은 국제화를 염두에두고 이전에 요청되었습니다 .
Serge Wautier

7
더 나은 방법이 있는지 궁금했던 질문 중 하나는 아닙니다. :)
Helephant


반대는 여기에서 찾을 수 있습니다 stackoverflow.com/a/667902/2343
사미르 Alibhai에게

답변:


197

내장 된 방식은 없다고 생각하지만 가장 쉬운 방법은

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

7
리소스에 문자열을
넣는

1
다른 언어를 사용하는 컴퓨터에서 코드가 작동하는지 확인하려는 경우 가장 좋은 방법입니다. 그렇지 않으면 알파벳을 동적으로 생성하면 (아래의 다른 답변과 같이) 다른 컴퓨터에서 다른 알파벳으로 끝날 수 있습니다.
Luis

다른 언어에서 어떻게 작동합니까? 이것은 어떻게 든 마술처럼 차인 문자를 포함합니까 아니면 문자가 다른 언어를 형성합니까?
Paweł Audionysos

104

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.Range의 유일한 오버로드가 int 매개 변수를 허용하더라도 작동합니다 ;-)


'
z'-

String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));반환 ABCDEFGHIJKLMNOPQRSTUVWXYZ;
abatishchev

15
@CasperT : 아마Enumerable.Range('a', 26)
abatishchev

ASCII 코드가 'a'- 'z'범위를 벗어난 문자가있는 언어에서는 작동하지 않습니다. 이러한 경우이 방법을 사용할 수 없습니다. 그렇지 않으면 좋은 솔루션입니다.
Michal B.

58
for (char letter = 'A'; letter <= 'Z'; letter++)
{
     Debug.WriteLine(letter);
}

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

3
정수와 소문자 배열을 만드는 데이 방법을 사용할 수 있기 때문에 이것이 최선의 해결책이라고 생각합니다. 이것은 허용 대답 :)해야한다
KAPE

@PopCatalin이 먼저 정답을 얻었지만 이것이 제가 사용한 접근 방식입니다. 무슨 일이 일어나고 있는지 이해하는 것이 조금 더 쉬우 며, 여러분이 알고 있다고 가정하는 유일한 정보는 알파벳에 26 개의 문자 ( 'A'.. 'Z')가 포함되어 있다는 것입니다.
Mass Dot Net

22

1 기반 인덱스를 기반으로 MS 엑셀 열 코드 (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...)를 얻기 위해 이것을 작성했습니다. (물론, 제로 기반으로 전환하는 것은 단순히 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

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를 하드 코딩하는 대신 (int) 'A'를 사용하는 것이 좋습니다. 코드를 더 읽기 쉽고 오류가 덜 발생합니다.
Mehrdad Afshari

그러나 'A'! = 65, (EBCDIC) 인 선행 인코딩에서는 A에서 Z까지가 연속적이지 않습니다.
James Curran

5
나에게 배열처럼 보이지 않습니다.
궤도에있는 가벼운 레이스

@MehrdadAfshari 내부적으로 사용되는 인코딩은 관련이 없습니다. 무엇 이며 관련하여 Char 타입의 값이 유니 코드 코드 포인트 있다는 것입니다, 그리고 사람들은 AZ의 연속이다.
Nyerguds 2016

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
}

( 여기 의 표를 참조 하십시오 .) 문자의 int 값에서 문자 값으로 캐스트하고 있지만 다른 언어 등이 아닌 ASCII 문자에서만 작동합니다.

편집 : Mehrdad 가 유사한 솔루션에 대한 의견에서 제안했듯이 다음 을 수행하는 것이 좋습니다.

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

이것은 A 문자를 int 값으로 캐스팅 한 다음 이에 따라 증가하므로 하드 코딩되지 않습니다.


이 코드에는 사소한 오류가 있습니다. i = 0 ~ <27에는 27 개의 문자가 포함됩니다 (배열 요소 0, 다음 요소 1 ~ 26).
Brian

더 좋게 만들 수 있습니다 : alphabet [i] = (char) (i + 'A'); 동일한 결과
CasperT 2009

1
char[] alphabet = new char[26];그래?
Shishir Gupta 2016

5

또한 문자열에는 Char를 반환하는 operator []가 있고 IEnumerable<char>이므로 대부분의 경우 문자열을 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 2016

@Nyerguds yield return부분 을 의미한다면 실제로 for 루프와 동일하지 않습니다. 무한 시리즈를 느리게 반환하는 데 사용할 수 있습니다.
weston nov.

아니, 나는 당신이 while매 턴마다 증가하고 고정 된 값으로 끝나는 카운터를 가지고 있다는 사실을 의미합니다 . 그것이 바로 for대체하도록 설계된 것입니다.
Nyerguds 2016

무슨 말인지 알겠습니다. 거기에 for 루프를 사용할 수 있습니다. 4 년 전이었는데 왜 안했는지 설명하기가 너무 힘들 었어요!
weston

2
var alphabets = Enumerable.Range('A', 26).Select((num) => ((char)num).ToString()).ToList();

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 2013 년

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++;
    }

서식 고정,하지만 코드가 불완전한 것으로 보인다합니다 (한 번 봐 걸릴 ifwhile문)
올리버

1
워, 그렇게 간단한 것에 대한 재귀? 간단한 While으로 26으로 나눌 수 있습니다.
Nyerguds 2011 년

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()}");
    }
}

이것이 해결책이더라도 이에 대한 자세한 정보와 기능을 제공하십시오.
George Z.

0

불행히도 바로 사용할 수있는 방법은 없습니다.

당신이 사용할 수있는; char [] characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray ();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.