برنامت خیلی متفاوت با برنامه استادمونه میتونی زحمت Tracesh رو بکشی
اگه قرار بود کد من شبیه کد استادتون باشه که الان من جای استادتون بودم.
بخش اول کد برنامه ارتباطی با الگوریتم ندارد :
کد:
using System;
using System.Collections.Generic;
using System.Text;
namespace CharCounter
{
class Program
{
static void Main(string[] args)
{
صفحه نمایش را پاک می کنیم :
یک رشته string را از کاربر دریافت کرده و در یک متغیر به نام text می نویسیم :
کد:
string text = Console.ReadLine();
یک آرایه از نوع int می سازیم که برای هر کاراکتر بین 0 الی 255 (جمعا 256 کاراکتر) یک خانه در نظر گرفته است.
کد:
int[] charset = new int[256];
در ادامه برنامه نشان خواهیم داد که چگونه از این آرایه برای مشخص کردن تعداد تکرار کاراکتر های 0 الی 255 استفاده کنیم.
تعداد تکرار هر کاراکتر را در خانه مربوط به آن خواهیم نوشت، مثلا اگر کاراکتر A (کد اسکی ASCII کاراکتر A برابر 65 است)
سه بار تکرار شود، در خانه [Charset[65 مقدار 3 را خواهیم نوشت.
با متغیر i یک حلقه خواهیم ساخت که از اولین کاراکتر رشته text را تا آخرین کاراکتر رشته پیمایش کند :
کد:
for (int i = 0; i<text.Length; i++)
اگر کد کاراکتر اندیس i ام رشته text از 256 کمتر بود، پس جزو کاراکتر هایی است که می خواهیم تعداد تکرارشان را
ذخیره کنیم :
پس مقدار خانه مربوط به آن کاراکتر را در آرایه charset یک واحد افزایش می دهیم :
وقتی اجرای حلقه به پایان می رسد، تعداد تکرار هر کاراکتر در درون آرایه charset مشخص شده است. بعضی از خانه
های این آرایه صفر است، یعنی آن کاراکتر اصلا در رشته وجود نداشته است.
با متغیر i حلقه ای می سازیم تا تمامی 256 خانه آرایه charset را از ابتدا تا انتها پیمایش کند :
کد:
for (int i = 0; i<256; i++)
اگر مقدار خانه اندیس i ام آرایه charset بزرگتر از صفر باشد، یعنی آن کاراکتر در رشته text وجود داشته :
و در چنین حالتی خود کاراکتری که کد اسکی ASCII اش i است ( (Convert.ToChar(i ) و تعداد تکرارش ( [Charset[i ) را
در خروجی چاپ خواهیم کرد :
کد:
Console.WriteLine(Convert.ToChar(i) + " " + charset[i]);
وقتی اجرای حلقه به پایان می رسد، تعداد تکرار تمامی کاراکتر ها (به شرط بزرگتر بودن از صفر) چاپ شده اند.
از کاربر می خواهیم که قبل از خروج از برنامه کلیدی را فشار دهد :
و برنامه خاتمه می یابد :