2016-12-22 24 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