Есть ли простой способ создать массив, содержащий буквы алфавита в C #? Это не так уж сложно сделать вручную, но мне было интересно, есть ли встроенный способ сделать это.
Есть ли простой способ создать массив, содержащий буквы алфавита в C #? Это не так уж сложно сделать вручную, но мне было интересно, есть ли встроенный способ сделать это.
Ответы:
Я не думаю, что есть встроенный способ, но я думаю, что проще всего было бы
char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
С # 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 ;-)
String.Concat(Enumerable.Range('a', 'z' - 'a' + 1).Select(c => ((char)c).ToString().ToUpperInvariant()));
возвращается ABCDEFGHIJKLMNOPQRSTUVWXYZ
;
Enumerable.Range('a', 26)
char[] alphabet = Enumerable.Range('A', 26).Select(x => (char)x).ToArray();
Я написал это, чтобы получить код столбца MS Excel (A, B, C, ..., Z, AA, AB, ..., ZZ, AAA, AAB, ...) на основе индекса на основе 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;
}
Convert.ToString
на String.valueOf
заставляет его работать на Java :)
Предполагая, что вы имеете в виду буквы английского алфавита ...
for ( int i = 0; i < 26; i++ )
{
Console.WriteLine( Convert.ToChar( i + 65 ) );
}
Console.WriteLine( "Press any key to continue." );
Console.ReadKey();
Вы можете сделать что-то вроде этого, основываясь на значениях 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, а не для разных языков и т. Д.
РЕДАКТИРОВАТЬ: Как было предложено Мехрдадом в комментарии к аналогичному решению, лучше сделать это:
alphabet[i] = (char)(i+(int)('A'));
Это приводит к преобразованию символа A в его значение int, а затем увеличивает его, так что это не жестко запрограммировано.
char[] alphabet = new char[26];
?
Также обратите внимание, что строка имеет оператор [], который возвращает Char, и является 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);
}
Удивлен, что никто не предложил решения для повышения урожайности:
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
часть, на самом деле это не эквивалент цикла for. Он таков, что с его помощью можно лениво возвращать бесконечную серию.
while
счетчик, который увеличивает каждый ход и заканчивается на фиксированном значении. Это именно то, что for
было призвано заменить.
var alphabets = Enumerable.Range('A', 26).Select((num) => ((char)num).ToString()).ToList();
char alphaStart = Char.Parse("A");
char alphaEnd = Char.Parse("Z");
for(char i = alphaStart; i <= alphaEnd; i++) {
string anchorLetter = i.ToString();
}
char alphaStart = 'A';
одинарные кавычки вместо двойных.
//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 способа получить английский алфавит в консоли:
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()}");
}
}