我需要在使用C#
传递两个字母时将字母作为数组例如:当我通过"AE"
时,我需要将{A,B,C,D,E}作为数组。并且传递"FJ"
应该返回{F,G,H,I,J}。
答案 0 :(得分:7)
Enumerable
类可以创建一个范围,这使得循环变得简单:
public static char[] CharactersBetween(char start, char end) {
return Enumerable.Range(start, end - start + 1).Select(c => (char)c).ToArray();
}
注意:char
值会隐式转换为int
,因此该方向无需转换。您只需将整数转换回char。
如果您想要发送字母表来使用(处理语言差异),您可以使用Substring
来获取该字符串的一部分:
public static char[] CharactersBetween(char start, char end, string alphabet) {
int idx = alphabet.IndexOf(start);
return alphabet.Substring(idx, alphabet.IndexOf(end) - idx + 1).ToCharArray();
}
答案 1 :(得分:2)
你的意思是
char[] CharactersBetween(char start, char end)
{
List<char> result = new List<char>();
for (char i = start; i <= end; i++)
{
result.Add(i);
}
return result.ToArray();
}
答案 2 :(得分:1)
这应该很好用
string startandend = "AG";
string result= "";
for( char i = startandend[0]; i <= startandend[1]; i++){
result += i;
}
result
现在将包含ABCDEFG
。
您应该添加一些逻辑来检查startandend
实际上是否Length
为2,依此类推,但这应该是一个很好的起点。
如果您想要char[]
而不是字符串表示,只需在结尾处拨打result.ToCharArray()
。
答案 3 :(得分:0)
使用带整数转换的循环 与
System.Convert.ToInt32(Char);
和
System.Convert.ToChar(Int32);
请参阅http://msdn.microsoft.com/en-us/library/system.convert_methods.aspx
答案 4 :(得分:0)
如果你使用固定的字母表,那就很简单了
public static string ALPHABET = "ABCDEFGHIJKLMNOPWRSTUVWXYZ";
public static List<char> GetLetters(string firstLast)
{
List<char> letters = new List<char>();
int start = ALPHABET.IndexOf(firstLast[0]);
int end = ALPHABET.IndexOf(firstLast[1]);
for (int i = start; i <= end; i++)
{
letters.Add(ALPHABET[i]);
}
return letters;
}
显然在你的支票中添加各种东西,但它完成了基本的工作。
答案 5 :(得分:0)
您将不得不参考您想要使用的字母。英语很容易,因为字母碰巧对应于代码点顺序,法语有时将Œ和Æ视为自己的字母,而不是其他字母。 Z和瑞典语之后的丹麦和挪威地方“Æ,Ø,Å”与“Å,Ä,Ö”相同。爱尔兰语使用“ABCDEFGHILMNOPRSTU”作为字母表,但也使用J,K,Q,V,W,X,Y&amp; Z用借词说。
那些相对容易的案例。所以没有一个尺寸适合所有人。
传递字母表的最简单方法是使用包含它的字符串。所以,例如丹麦字母表中的字符串为“ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ”,而法语可以根据需要包含连字符(但是你是否需要处理不使用它们时接收它们的可能性?)。
这样做了:
public static IEnumerable<char> AlphabetRange(string alphabet, string alphaRange)
{
if(alphaRange == null)
throw new ArgumentNullException();
if(alphaRange.Length < 2)
throw new ArgumentException();
int startIdx = alphabet.IndexOf(alphaRange[0]);
int endIdx = alphabet.IndexOf(alphaRange[1]) + 1;
if(startIdx == -1 || endIdx == 0)
throw new ArgumentException();
while(startIdx < endIdx)
yield return alphabet[startIdx++];
}