我实际上试图在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;
}
答案 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-z
,A-Z
和0-9
。既然你也关心空间,你必须手动检查它。