2016-12-22 49 views
-6

我實際上試圖在c#中從頭開始創建一個StringToASCII函數。從頭開始StringToASCII失敗

我從_myString輸入,這是代碼:

public void convertToASCII() { 
    //A-Z --> 65-90 
    //a-z --> 97-122 
    //0-9 --> 48-57 
    //Space --> 32 

    int[] returnString = new int[_myString.Length]; 
    int iTableau = 0; 
    char iAZ = 'A'; 
    char iaz = 'a'; 
    char i09 = '0'; 
    char iSpace = ' '; 

    for(int i = 0; i < _myString.Length; i++) 
    { 
     if(_myString[i] >= 65 && _myString[i] <= 90 || _myString[i] >= 97 && _myString[i] <= 122 || _myString[i] >= 48 && _myString[i] <= 57 || _myString[i] == 32) 
     { 
      while(iAZ < 90 || iaz < 122 || iaz < 122 || i09 < 57 || _myString[i] == 32) 
      { 
       if(_myString[i] == iAZ && iAZ >= 'A' && iAZ <= 'Z') 
       { 
        returnString[iTableau] = iAZ; 
        iTableau++; 
        iAZ--; 
       } 
       else 
       { 
        iAZ++; 
       } 
       if(_myString[i] == iaz && iaz >= 'a' && iaz <= 'z') 
       { 
        returnString[iTableau] = iaz; 
        iTableau++; 
        iaz--; 
       } 
       else 
       { 
        iaz++; 
       } 
       if(_myString[i] == i09 && i09 >= '0' && i09 <= '9') 
       { 
        returnString[iTableau] = i09; 
        iTableau++; 
        i09--; 
       } 
       else 
       { 
        i09++; 
       } 
       if(_myString[i] == iSpace) 
       { 
        returnString[iTableau] = iSpace; 
        iTableau++; 
       } 
      } 
     } 
    } 

    _myString = ""; 

    for (int i = 0; i < returnString.Length; i++) 
    { 
     _myString += returnString[i]; 
    } 
} 

我也嘗試過這樣的功能,它的工作原理,但我想提出一個誰從AZ和AZ和只檢查​​字符0-9和空間。

與第一個函數相同,我從一個名爲「_myString」的全局字符串變量中獲取輸入。

public void convertToASCII() 
{ 
    string asciiChar; 
    string returnString = ""; 

    foreach (char c in _myString) 
    { 
     asciiChar= ((int)(c)).ToString(); 
     returnString += " " + asciiChar; 
    } 
    _myString = returnString; 
} 
+2

這裏有問題嗎? – Abion47

+0

你是什麼意思「只檢查」?你如何處理超出這些範圍的角色?只是忽略它們?使用替換字符? 'Encoding.ASCII'有什麼問題? – itsme86

+0

@ itsme86首先感謝您的快速響應,我只想檢查_myString [i]是否在這些範圍內,然後我將它們放入一個數組中,然後再重新結束。 –

回答

0

這實際上是比較簡單的:

public string StringToLettersOrNumbersOrSpace(string input) 
{ 
    var sb = new StringBuilder(); 

    for (int i = 0; i < input.Length; i++) 
    { 
     if (Char.IsLetterOrDigit(input[i]) || input[i] == ' ') 
     { 
      sb.Append(input[i]); 
     } 
    } 

    return sb.ToString(); 
} 

首先,你需要使用StringBuilder,而不是不斷地追加到一個字符串變量。 C#中的字符串是不可變的,這意味着它們在創建後不能更改,所以執行類似string s1 = "aaa"; s1 += "bbb";的操作實際上會創建一個全新的字符串,而不是僅添加到原始字符串中。另一方面,StringBuilder是可變的,所以你不需要擔心每次你想要連接字符串(隨着字符串變大而逐漸變慢和變慢)重新分配一堆字符串。

其次,您可以使用Char.IsLetterOrDigit而不是使用比較。該方法以char作爲輸入,如果字符是字母(大寫或小寫)或數字,則返回true。這直接映射到您想要的範圍a-z,A-Z0-9。因爲你也關心空間,但是你必須手動檢查。

+0

我沒有downvoted,有人做了這個。 –

+0

https://msdn.microsoft.com/en-us/library/cay4xx2f(v=vs.110).aspx - 建議使用IsLetterOrDigit來檢測ASCII字母絕對沒有意義(我也有點支持使用無效解決方案來控制OP - 但它看起來不像是你的目標)。 –

+0

@AlexeiLevenkov你讀過這個問題了嗎? OP的目標是專門獲取'a-z','A-Z','0-9'和空格字符範圍內的字母。 – Abion47