2010-11-12 75 views

回答

1

您應該能夠使用LINQ照顧那(現測試語法):

var asciiCodes = S.Where(c => char.IsLetter(c)).Select(c => (int)c); 

或者,如果你不想使用LINQ-Y版本:

var characterCodes = new List<int>(); 

foreach(var c in S) 
{ 
    if(char.IsLetter(c)) 
    { 
     characterCodes.Add((int)c); 
    } 
} 
+0

我會用在哪裏!char.IsNumber(三)打印一個,但linq是一個很好的答案 – Kell 2010-11-12 14:19:48

+0

@Kell - !char.IsNumber(c)仍然會返回OP明確表示他不想要的標點(破折號)。我忘記了char.IsLetter(),儘管它會做他們需要的。 – 2010-11-12 14:24:57

+0

我以爲他想要非數字字符cos有2個額外的非數字。在這種情況下,我會使用Char.IsLetter(c) – Kell 2010-11-12 14:28:54

0

您可以使用以下代碼將字符轉換爲代碼點:(int)'a'

0

要單獨的(如果你知道它的分裂上 - 你可以使用string.Split

要得到「A」的ASCII表示,例如,使用下面的代碼

int asciivalue = (int)'A'; 

如此完整的例子可能是

Dictionary<char,int> asciilist = new Dictionary<char,int>(); 
string s = "AB-1233-444"; 
string[] splitstrings = s.Split('-'); 
foreach(char c in splitstrings[0]){ 
    asciilist.Add(c, (int)c); 
} 
+0

您在這裏意味着什麼asciilist – 2010-11-12 14:04:12

+0

也許不是一個好名字,但我不知道OP對這個列表想要什麼,所以我只是把它存儲在某個地方而不是對它做任何邏輯。這是一個包含char的字典,它與ascii值相關聯,但正如您可能理解的那樣,除了示例效果本身之外,它是無用的。 – 2010-11-12 14:09:23

0
var result = (from c in S.ToCharArray() where 
    ((int)c >= (int)'a' && 
    (int)c <= (int)'z') || 
    ((int)c >= (int)'A' && 
    (int)c <= (int)'Z') select c).ToArray(); 

非LINQ版本如下:

List<char> result = new List<char>(); 
foreach(char c in S) 
{ 
    if(((int)c >= (int)'a' && 
    (int)c <= (int)'z') || 
    ((int)c >= (int)'A' && 
    (int)c <= (int)'Z')) 
     { 
     result.Add(c); 
     } 
} 
+0

我可以在non-linq版本 – 2010-11-12 14:06:03

+0

非linq版本查找更新版本:) – Katalonis 2010-11-12 14:11:25

0

您可以使用子獨自獲得的字母和一個數組使用for循環字母的儲值,並通過一個

相關問題