نمایش نتایج 1 تا 4 از 4

نام تاپیک: مشکل در پیاده سازی الگوی فشرده سازی

  1. #1

    Lightbulb مشکل در پیاده سازی الگوی فشرده سازی

    با سلام !!
    من برای یک برنامه از یه الگوی فشرده سازی ساده استفاده کردم الگوی کامپرس کردن رو درست نوشتم به طوری که به درستی کارش رو انجام میده اما الگوی دیکد کردن ........ من از الگوی RLE یا Run Length Encoding استفاده کردم که در آن حروف تکرای پشت سر هم به این صورت فشرده میشه که ابتدا تعداد دفعات تکرار رشته به همراه رشته در آن نوشته میشه مثلا :
    AAAAAAAAAA میشه 10A خب حالا با این تعاریف من یک متد سادهبرای انکود کردن آن بدین صورت نوشتم که به هر حال کار خودش رو درست انجام میده :
     		private string looped;//Dim looped() As String (Char Hayeh Tekrary!!!)
    private string sh;

     public string RLE(string str)
    {
    sh=null;
    looped=str[0].ToString();
    int len=str.Length;//Dim len As Integer=Len(str2)
    char lastchr;//Dim lastchr As String
    try
    {
    for(int b=1;b!=str.Length;b++)//For b=1 To Len(str2(i)
    {
    lastchr=str[b-1];
    if(lastchr==str[b])
    {
    looped=looped+str[b];
    }
    else if(lastchr!=str[b])
    {
    looped+="|";
    looped=looped+str[b];
    }
    }//End For
    string[]after=looped.Split("|".ToCharArray());
    for(int i=0;i!=after.Length;i++)
    {
    sh+=after[i].Length.ToString()+after[i].Substring(0,1);
    }
    //sh=sh.Replace("|","");
    }
    catch(System.Exception ea)
    {
    MessageBox.Show(ea.Message);
    }
    return sh;
    }



    الگوی دیکد رو ولی هنوز نتونستم کامل کنم البته یه چیز هایی نوشتم که فکر نکنم اصولی باشه !!! {چون کارش رو درست انجام نمیدهد} حال می خواستم در باره چگونه دیکد کردن رشته هایی که این الگو به ما بر می گرداند یه توضیح کوتاهی بدهید !!
    در صورتی که مایل بودید متد دیکامپرسی که در بالا به آن اشاره کردم هم براتون می گذارم !!!
    منتظر پاسخ شما هستم

  2. #2

    Red face اا

    خوب معلومه در دیکد کردنش به مشکل میخوری نگاه کن:
    ورودی برنامه کدر تو اگر 103aaaa باشه خروجیت میشه: 1034a خوب اگه ورودی برای دیکد کردن 1034a باشه دیکدش چی میشه؟؟(1034 تا A؟ یا . . .)
    باید یجوری معین کنی که 4 فقط برای تعداد است و 103 یک عدد داخل رشته است.از یک دلیمیتر(فارسیش فکر کنم میشه مرز نگه دار ،حائل ) استفاده کن

  3. #3

    Arrow

    همین دیگه مشکل کلی این الگوریتم مشکلل اعداد وکدو دیکد کردن آن هاست که البته در کاری که قراره انجام بدم زیاد از اعداد استفاده نمیشه برای همین زیاد مهم نیست ولی مشکل اصلی من در کل دیکد کردن روشی که من برای دیکد استفاده می کنم اینه :
    ابتدا یه فیلد از نوع آرایه رشته ای در نظر می گیرم و با یه چرخه اعداد بین 1 تا int.MaxValue در این آرایه میریزم.
    بعد میام با چرخه در آرایه اعداد تکت تکت رشته ها رو مقایسه می کنم که آیا عدد هستند یا نه !! بعد اگه عدد بودند میام یه چرخه دیگه می ذارم که به تعداد اون عدد که با Convert.ToInt32 اونا رو به عدد تبدیل کردم اون هارو تکرار می کنم ولی در زمان دستور شرطی برنامه یه استثنا براش پیش میاد و و می پره بیرون !!! حالا به نظر شما از چه روشی باید استفاده کنم که این مشکل بوجود نیاد ؟؟؟؟؟

  4. #4
    یعنی سوال سخت خیلی دور از دسترسی پرسیدم ؟؟؟؟؟؟
    آخرین ویرایش به وسیله CSharp-Assistant : دوشنبه 27 تیر 1384 در 22:32 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •