求助,各位,关于过滤字符的一题
以下程序将输入的字符串中的非法字符(<>等)过滤掉。要求用位运算进行改写。
方法为,定义一个16个元素的Byte类型的数组,一共128位,来表示128个ASCII字符,将非法字符对应位置1,合法字符对应位置0
然后采用位运算来判断。
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
foreach (char c in s)
{
if (!IsSpecialCharacter(c))
Console.Write(c);
}
}
static bool IsSpecialCharacter(char x)
{
if (x=='<'||x=='>'||x == '.' || x == '*' || x == '!' || x == '{' || x == '}' || x == '%' || x == ',' || x == '@' || x == '&' || x == '\0' || x == '(' || x == ')' || x == ' ')
{
return true;
}
else
{
return false;
}
}
}
//ASCII
//!=>33
//%=>37
//&=>38
//(=>40
//)=>41
//*=>42
//<60
//=61
//>62
//@=>64
//{=>123
//}=>125
然后,下面是我的答案,不知道那里错了,还有byte怎么用,int人说浪费空间。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace filter//过滤非法字符
{
class Program
{
static void Main(string[] args)
{
string s = Console.ReadLine();
int[] ascll = new int[16]{128,0,16,24,140,84,0,21,0,0,0,0,0,0,0,20};
int i=0,j=0,l=0;
foreach (char c in s)
{
for (; i < 16; i++)
{
for (; j < 8; j++)
{
if (((ascll[i] >> j) & 1) == 1)
{
l = i * 8 + j + 1;
if (c != (char)(l))
Console.Write(c);
}
}
}
}
Console .ReadKey ();
}
}
}