我目前正在创建一个程序,该程序使用数组对文本文档中的ASCII字符进行分类。在创建阵列本身时,我很困惑,这是项目功能的关键部分。还建议我使用charfrequency对象创建数组,我知道我的代码对于这个特定的项目来说并不完全正确。我使用了另一个类似项目的代码,但不确定如何将其转换为从文件中读取文本的项目。我已经包含了我的charfrequency类代码,以供参考我想要做的事情的一般概念。我还需要以这样的格式显示结果:
H(72) = 1
e(101) = 1
l(108) = 2
o(111) = 1
.(46) = 1
我不太了解编程,所以使用相对简单的术语进行详细解释会非常有用。
{
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;
}
}
}
答案 0 :(得分:6)
由于Unicode与ASCII代码匹配,您只需选择带有Enumerable.Range
的ASCII范围:
var allAscii = Enumerable.Range('\x1', 127).ToArray();
请注意,C#/ .Net使用UTF-16(C# and UTF-16 characters)来表示char
,但如果您只查找ASCII范围,则不会出现问题(因为ASCII涵盖了字符使用代码1-127,它不会与在字符串中编码为2 char
的代理项对冲突。)
答案 1 :(得分:1)
您只需将您的角色频率存储在Dictionary<char, long>
。
答案 2 :(得分:1)
也许你想看看这个:
http://stackoverflow.com/questions/3665757/c-sharp-convert-char-to-int
如果是我,我会创建一个数组,其中我存储了这样的角色:
long[] charCount = new long[256];
然后每次我看到一个字符将其转换为整数值,如:
int idx = (int)char.GetNumericValue(c);
然后计算出这样的角色:
charCount[idx]++;