Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中创建所有ASCII字符的数组#_C#_Arrays_Ascii - Fatal编程技术网

C# 在C中创建所有ASCII字符的数组#

C# 在C中创建所有ASCII字符的数组#,c#,arrays,ascii,C#,Arrays,Ascii,我目前正在创建一个程序,它使用数组对文本文档中的ASCII字符进行分类。当涉及到创建阵列本身时,我被卡住了,这是项目功能的关键部分。还有人建议我用charfrequency对象制作数组,我知道我的代码不适合这个特定项目。我使用了另一个类似项目中的代码,但不确定如何将其转换为从文件读取文本的项目。我已经包括了我的charfrequency类代码,作为我尝试做什么的一般想法的参考。我还需要以如下格式显示结果: H(72) = 1 e(101) = 1 l(108) = 2 o(111) = 1 .(

我目前正在创建一个程序,它使用数组对文本文档中的ASCII字符进行分类。当涉及到创建阵列本身时,我被卡住了,这是项目功能的关键部分。还有人建议我用charfrequency对象制作数组,我知道我的代码不适合这个特定项目。我使用了另一个类似项目中的代码,但不确定如何将其转换为从文件读取文本的项目。我已经包括了我的charfrequency类代码,作为我尝试做什么的一般想法的参考。我还需要以如下格式显示结果:

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的字符,它不会与编码为字符串中的2
char
的代理项对冲突).

您只需将您的字符频率存储在
字典中

也许您想看看这个:

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个元素。