我正在寻找一种快速获取字母在字母表中整数位置的方法(C#)。
我可以简单地创建一个数组并获取该位置,但似乎必须有一种“好玩又时髦”的方式来实现这一点?
我还尝试了根据大写字符与“65”之间的ASCII位置来获取位置,但似乎比应该更加繁琐!
[仅适用于英文26个字母表,不需要国际化 - 不,这不是作业!]
我正在寻找一种快速获取字母在字母表中整数位置的方法(C#)。
我可以简单地创建一个数组并获取该位置,但似乎必须有一种“好玩又时髦”的方式来实现这一点?
我还尝试了根据大写字符与“65”之间的ASCII位置来获取位置,但似乎比应该更加繁琐!
[仅适用于英文26个字母表,不需要国际化 - 不,这不是作业!]
编程入门:
char c = 'A';
//char c = 'b'; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1
对于大小写:
int index = (int)c % 32;
return (char)('a' + (position - 1))
怎么样? - mamuesstack/// <summary>
/// Converts a latin character to the corresponding letter's index in the standard Latin alphabet
/// </summary>
/// <param name="value">An upper- or lower-case Latin character</param>
/// <returns>The 0-based index of the letter in the Latin alphabet</returns>
private static int GetIndexInAlphabet(char value)
{
// Uses the uppercase character unicode code point. 'A' = U+0042 = 65, 'Z' = U+005A = 90
char upper = char.ToUpper(value);
if (upper < 'A' || upper > 'Z')
{
throw new ArgumentOutOfRangeException("value", "This method only accepts standard Latin characters.");
}
return (int)upper - (int)'A';
}
由于char
和int
在计算中可以混用,因此您可以将char作为数字处理(这将确保其值在众所周知的范围内):
char c = 'A';
var index = (c < 97 ? c - 64 : c - 96);
这是一个很好的实现方式,可以将Excel字符串中的列读入到列号中。感谢上面解答的@ahmed-kraiem和@vladimir。
public int AddColFromLetter(string s)
{
int column = 0;
int iter = 1;
foreach (char c in s)
{
int index = char.ToUpper(c) - 64;//Ahmed KRAIEM
//int index = (int)c % 32;//Valdimir
if(iter == 1)
column += index;
if(iter > 1)
column += 25+ index;
iter++;
}
return column;
}
int index= c & 0b11111;
'A'
为65,二进制为01000001。'a'
为95,二进制为01100001。如果我们简单舍弃三个最高位字节,就可以得到字母的整数位置,这就是掩码所做的事情。
int index = ((int) char.ToUpper(c)) - 64;
- Ahmed KRAIEMint index = char.ToUpper(c) - 'A';
此外,A
不应该在索引 0 处吗?C# 使用基于 0 的索引! - Matthew Watsonint index = (int)c%32;
。 - Vladimir