StringToASCII从头开始失败

时间:2016-12-22 23:15:34

标签: c# string type-conversion ascii

我实际上试图在c#中从头开始创建一个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];
    }
}

我也尝试过这种功能,但是我想制作一个只检查A-Z和a-z以及0-9和空格中的字符的人。

与第一个函数相同,我从名为&#34; _myString&#34;的全局字符串变量中获取输入。

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

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

1 个答案:

答案 0 :(得分: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是可变的,因此您不必担心每次要连接字符串时都会重新分配一串字符串(随着字符串变大,字符串逐渐变慢和变慢)。 / p>

其次,您可以使用Char.IsLetterOrDigit而不是使用比较。该方法采用char作为输入,如果字符是字母(大写或小写)或数字,则返回true。这会直接映射到您想要的范围a-zA-Z0-9。既然你也关心空间,你必须手动检查它。