2010-04-12 64 views
1

我试图将1到27的索引转换成相应的大写字母。我知道在C++中我可以输入:如何将整数转换为C#中的字符?

char letter = 'A' + (char)(myIndex % 27); 

这个相同的代码在C#中不起作用。我怎样才能在C#中完成这项任务?

编辑:我宁可不必编码一个枚举或开关语句,如果有一个更好的数学解决方案,如上面那个。

+0

char letter = Convert.ToChar(myIndex); – 2013-03-07 13:47:43

回答

8

当你添加(或减去)两个字符,哟你在C#中获得一个Int32。这将工作:

int letter = 'A' + (char)(myIndex % 27); 

如果你想要一个字符,你需要再次明确地投它:

char letter = (char) ('A' + (char)(myIndex % 27)); 

然而,这极有可能实际上应该是:

char letter = (char) ('A' + (char)((myIndex - 1) % 26)); 
+1

你应该s/27/26/g – Vlad 2010-04-12 19:12:01

+0

是的,但我想做OP的代码的等价物。 – 2010-04-12 19:12:50

+0

@Vlad:你更喜欢那样? – 2010-04-12 19:13:24

4
char letter = (char)('A' + (myIndex-1)%26); 

(编辑出幻数,调整指数)

+0

对不起,-1为幻数 – 2010-04-12 19:05:53

+0

哦,对。 '%26'。谢谢。我想我是让这一个比所需要的更难。 – 2010-04-12 19:44:26

2

在C#中,你必须做你的铸造略有不同:

char letter = (char)('A' + (myIndex % 27)); 

然而,你的数学也可能是错的,这可能更接近你真正想要的:

char letter = (char)('A' + ((myIndex - 1) % 26)); 
+0

%27错了,应该是26 :-)拉丁字母只有26个字母。 – Vlad 2010-04-12 19:11:39

+0

我从原始代码中复制出来的......他说他有一个从1到27的索引。当然,要得到正确的拉丁字母,他应该这样做('A'+(char)((myIndex - 1)%26)) – 2010-04-12 19:13:46

+0

确实,我明白了。 26应该更好地工作。 – Vlad 2010-04-12 19:14:55

0

这应该工作...

byte upperA = 65; 
byte index = 1; 

char letter = (char)(upperA + (index % 27)); 

Console.WriteLine(letter); 

我也像里德的回答。

6

这里是一个表驱动的解决方案:

char ToUpperChar(int index) 
{ 
    if (index < 1 || index > 26) 
     throw new ArgumentOutOfRangeException("index"); 

    return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[index-1]; // took out the % - it's range-checked above. 
} 
+0

+1更原始的方法。所以很多类型铸件变得无聊;)它纯粹是数学的,因为数组索引是指针算术的语法糖。 – 2010-04-12 20:02:59

1

如何扩展方法?

public static int Index(this char letter) 
    { 
     const int offset = 64; 
     if(letter >= 'A' && letter <= 'Z') 
      return (Convert.ToInt32(letter) - offset); 
     return 0; 
    } 

//用法... char letter ='A'; int index = letter.Index();

+0

对不起!错误的方法。尝试这个... public static char CharToIndex(this int number)const int offset = 64;如果(number> = 1 && number <= 26) return(Convert.ToChar(number + offset)); 返回'\ 0'; } //使用... int i = 1; char c = i.CharToIndex(); – soulia 2010-04-13 20:40:27

相关问题