Программа счетчика символов - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать программу, которая подсчитывает символы ASCII в файле и отслеживает, сколько раз каждый символ появляется в файле.Затем он должен записать вывод в файл.Если в файле указано «Hello», выходной файл должен быть отформатирован так, чтобы он показывал:

H (72) 1 e (101) 1 l (108) 2 o (111) 1. (46) 1

Код, который я написал до сих пор, приведен ниже:

using System.IO;
using System;
using System.Collections;

class CharacterFrequency
{
    char ch;
    int frequency;
    public char getCharacter()
    {
        return ch;
    }
    public void setCharacter(char ch)
    {
        this.ch = ch;
    }
    public int getfrequency()
    {
        return frequency;
    }
    public void setfrequency(int frequency)
    {
        this.frequency = frequency;
    }


    static void Main()
    {
        string OutputFileName;
        string InputFileName;
        Console.WriteLine("Enter the file path");
        InputFileName = Console.ReadLine();

        Console.WriteLine("Enter the outputfile name");
        OutputFileName = Console.ReadLine();
        StreamWriter streamWriter = new StreamWriter(OutputFileName);

        string data = File.ReadAllText(InputFileName);

        ArrayList al = new ArrayList();
        al.Add(data);
        //create two for loops to traverse through the arraylist and compare
        for (int i = 0; i < al.Count; i++)
        {
            //create variable k to count the repeated element
            //(if k>0 it means that the particular element is not the first instance)
            int k = 0;
            //count frequency variable
            int f = 0;
            for (int j = 0; j < al.Count; j++)
            {
                //compare the characters
                if (al[i].Equals(al[j]))
                {
                    f++;
                    if (i > j) { k++; }
                }
            }
            if (k == 0)
            {
                //Display in the correct format
                Console.Write(al[i] + "(" + (int)al[i] + ")" + f + " ");
            }

        }



    }
}

Я получаю сообщение об ошибке в последней строке кода (Console.Write), в котором говорится: «Указанное преобразование недопустимо».Я знаю, что эта программа может быть написана неправильно, но мне трудно пытаться выполнить эту задачу, используя список массивов.Я выполнил эту задачу, используя Sorted Dictionary в предыдущей программе, но теперь мне нужно использовать Array List.Любой совет о том, как исправить ошибку и как выглядит моя программа, очень ценится.

1 Ответ

0 голосов
/ 20 ноября 2018

Сохраняя это довольно похоже, я смог заставить это работать.Если вы храните его как строку и рассматриваете его как массив символов, он работает довольно хорошо.

 string data = "Hello";
    for (int i = 0; i < data.Length; i++)
    {
        int k = 0;
        int f = 0;
        for (int j = 0; j < data.Length; j++)
        {      
            if (data[i].Equals(data[j]))
            {
                f++;
                if (i > j) { k++; }
            }
        }

            //Display in the correct format
            Console.Write(data[i] + "(" + (int)data[i] + ")" + f + " ");
    }
...