在C#

时间:2015-05-14 23:22:30

标签: c# arrays ascii

我目前正在创建一个程序,该程序使用数组对文本文档中的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;
    }

}

}

3 个答案:

答案 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]++;