2016-12-22 15 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からのみ文字をチェックし、1をしたいと思い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は可変であるため、文字列を連結するたびに文字列の再割り当てを心配する必要はありません(文字列が大きくなるにつれて徐々に遅くなり、遅くなります)。

第2に、比較を使用する代わりにChar.IsLetterOrDigitを使用できます。このメソッドはcharを入力とし、文字が文字(大文字または小文字)または数字の場合はtrueを返します。これは、希望の範囲a-zA-Z、および0-9に直接マッピングされます。スペースについても気にするので、手動でチェックする必要があります。

+0

私はdownvotedしなかった、誰かがこれをやった。 –

+0

https://msdn.microsoft.com/en-us/library/cay4xx2f(v=vs.110).aspx - IsLetterOrDigitを使用してASCII文字を検出することは意味がありません(無効なソリューションでトローリングをサポートしています - それはあなたの目標であるように見えません)。 –

+0

@AlexeiLevenkovあなたは質問の本文を読みましたか? OPの目標は、特に、「a-z」、「A-Z」、「0-9」および空白文字の範囲の文字を取得することです。 – Abion47

関連する問題