C# 在C中创建所有ASCII字符的数组#
我目前正在创建一个程序,它使用数组对文本文档中的ASCII字符进行分类。当涉及到创建阵列本身时,我被卡住了,这是项目功能的关键部分。还有人建议我用charfrequency对象制作数组,我知道我的代码不适合这个特定项目。我使用了另一个类似项目中的代码,但不确定如何将其转换为从文件读取文本的项目。我已经包括了我的charfrequency类代码,作为我尝试做什么的一般想法的参考。我还需要以如下格式显示结果:C# 在C中创建所有ASCII字符的数组#,c#,arrays,ascii,C#,Arrays,Ascii,我目前正在创建一个程序,它使用数组对文本文档中的ASCII字符进行分类。当涉及到创建阵列本身时,我被卡住了,这是项目功能的关键部分。还有人建议我用charfrequency对象制作数组,我知道我的代码不适合这个特定项目。我使用了另一个类似项目中的代码,但不确定如何将其转换为从文件读取文本的项目。我已经包括了我的charfrequency类代码,作为我尝试做什么的一般想法的参考。我还需要以如下格式显示结果: H(72) = 1 e(101) = 1 l(108) = 2 o(111) = 1 .(
H(72) = 1
e(101) = 1
l(108) = 2
o(111) = 1
.(46) = 1
long[] charCount = new long[256];
我不太懂编程,所以用相对简单的术语进行详细解释会非常有帮助
{
public class CharFrequency
{
private char m_character;
private long m_count;
public CharFrequency(char ch)
{
Character = ch;
Count = 0;
}
public CharFrequency(char ch, long charCount)
{
Character = ch;
Count = charCount;
}
public char Character
{
set
{
m_character = value;
}
get
{
return m_character;
}
}
public long Count
{
get
{
return m_count;
}
set
{
if (value < 0)
value = 0;
m_count = value;
}
}
public void Increment()
{
m_count++;
}
public override bool Equals(object obj)
{
bool equal = false;
CharFrequency cf = new CharFrequency('\0', 0);
cf = (CharFrequency)obj;
if (this.Character == cf.Character)
equal = true;
return equal;
}
public override int GetHashCode()
{
return m_character.GetHashCode();
}
public override string ToString()
{
String s = String.Format("Character '{0}' ({1})'s frequency is {2}", m_character, (byte)m_character, m_count);
return s;
}
}
{
公共类字符频率
{
私有字符m_字符;
私人长m_计数;
公共字符频率(char ch)
{
字符=ch;
计数=0;
}
公共字符频率(字符数、长字符数)
{
字符=ch;
Count=charCount;
}
公共字符
{
设置
{
m_字符=值;
}
收到
{
返回m_字符;
}
}
公众长计数
{
收到
{
返回m_计数;
}
设置
{
如果(值<0)
数值=0;
m_计数=数值;
}
}
公共空间增量()
{
m_count++;
}
公共覆盖布尔等于(对象对象对象)
{
布尔等于假;
CharFrequency cf=新的CharFrequency('\0',0);
cf=(CharFrequency)obj;
if(this.Character==cf.Character)
相等=正确;
回报相等;
}
公共覆盖int GetHashCode()
{
返回m_字符。GetHashCode();
}
公共重写字符串ToString()
{
String s=String.Format(“字符{0}”({1})的频率为{2}”,m_字符,(字节)m_字符,m_计数);
返回s;
}
}
}由于Unicode与ASCII码匹配,您只需使用
可枚举范围选择ASCII范围即可。范围
:
var allAscii = Enumerable.Range('\x1', 127).ToArray();
请注意,C#/.Net使用UTF-16()表示
char
,但如果您只查找ASCII范围,则这不是问题(因为包含代码1-127的字符,它不会与编码为字符串中的2char
的代理项对冲突).您只需将您的字符频率存储在字典中
也许您想看看这个:
http://stackoverflow.com/questions/3665757/c-sharp-convert-char-to-int
如果是我,我会创建一个数组,在其中存储字符发生,如下所示:
H(72) = 1
e(101) = 1
l(108) = 2
o(111) = 1
.(46) = 1
long[] charCount = new long[256];
然后每次我看到一个字符时,都会将其转换为整数值,如下所示:
int idx = (int)char.GetNumericValue(c);
然后计算角色出现的次数,如下所示:
charCount[idx]++;
你能说得更具体一点吗?我在这里没有看到任何问题。这似乎更符合OP的要求。Unicode的ASCII子集是代码点0-127。因此,数组只需要有128个元素。