使用C#获取两个字母(AE)之间的字母(ABCDE)

时间:2010-10-18 06:54:01

标签: c#

我需要在使用C#

传递两个字母时将字母作为数组

例如:当我通过"AE"时,我需要将{A,B,C,D,E}作为数组。并且传递"FJ"应该返回{F,G,H,I,J}。

6 个答案:

答案 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++];
}