Mohammad Hosseini
چهارشنبه 11 اردیبهشت 1392, 21:42 عصر
سلام
خسته نباشید
آقا یه برنامه هست یه نوع فشرده سازی رو انجام میده (الگوریتمی به نام run length) که شاید بدونید چطوریه ولی من توضیح میدم که تو وقت صرفه جویی بشه و اونم اینطوریه که مثلا یه رشته ای به شکل
wwwwwqqqqqwwwqq
رو دریافت میکنه و به صورت
5w5q3w2q
کد میکنه؛ولی در مورد رشته ای از صفر و یک جواب نمیده ینی نمیتونه دیکد کنه،حالا من یه کاری کردم که به جای صفر قرار میده O و به جای یک l میزاره ولی میخاسم ببینم میتنید کمک کنید که نیازی نباشه کاراکتر جایگزین کنم و با همون اعداد عمل کنه؟
خیلی ممنون
این برنامه ی خودمه
using System;
using System.Collections.Generic;
using System.Text;
namespace run
{
class Program
{
static void Main(string[] args)
{
string input = "111111111111111100110000";
Console.WriteLine(Encode(input));//Outputs: 12W1B12W3B24W1B14W
Console.WriteLine(Decode(Encode(input)));//Outputs: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW
Console.ReadKey();
}
public static string Encode(string s)
{
StringBuilder sb = new StringBuilder();
int count = 1;
char current = s[0];
for (int i = 1; i < s.Length; i++)
{
if (current == s[i])
{
count++;
}
else
{
sb.AppendFormat("{0}{1}", count, (current == '1' ? 'l' : 'O'));
count = 1;
current = s[i];
}
}
sb.AppendFormat("{0}{1}", count, (current == '1' ? 'l' : 'O'));
return sb.ToString();
}
public static string Decode(string s)
{
string a = "";
int count = 0;
StringBuilder sb = new StringBuilder();
char current = char.MinValue;
for (int i = 0; i < s.Length; i++)
{
current = s[i];
if (char.IsDigit(current))
a += current;
else
{
count = int.Parse(a);
a = "";
for (int j = 0; j < count; j++)
sb.Append((current == 'l' ? '1' : '0'));
}
}
return sb.ToString();
}
}
}
اینم برنامه ی اولیه که فط در مورد حروف جواب میده
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace run
{
class Program
{
static void Main(string[] args)
{
string input = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW";
Console.WriteLine(Encode(input));//Outputs: 12W1B12W3B24W1B14W
Console.WriteLine(Decode(Encode(input)));//Outputs: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW
Console.ReadLine();
}
public static string Encode(string s)
{
StringBuilder sb = new StringBuilder();
int count = 1;
char current = s[0];
for (int i = 1; i < s.Length; i++)
{
if (current == s[i])
{
count++;
}
else
{
sb.AppendFormat("{0}{1}", count, current);
count = 1;
current = s[i];
}
}
sb.AppendFormat("{0}{1}", count, current);
return sb.ToString();
}
public static string Decode(string s)
{
string a = "";
int count = 0;
StringBuilder sb = new StringBuilder();
char current = char.MinValue;
for (int i = 0; i < s.Length; i++)
{
current = s[i];
if (char.IsDigit(current))
a += current;
else
{
count = int.Parse(a);
a = "";
for (int j = 0; j < count; j++)
sb.Append(current);
}
}
return sb.ToString();
}
}
}
خسته نباشید
آقا یه برنامه هست یه نوع فشرده سازی رو انجام میده (الگوریتمی به نام run length) که شاید بدونید چطوریه ولی من توضیح میدم که تو وقت صرفه جویی بشه و اونم اینطوریه که مثلا یه رشته ای به شکل
wwwwwqqqqqwwwqq
رو دریافت میکنه و به صورت
5w5q3w2q
کد میکنه؛ولی در مورد رشته ای از صفر و یک جواب نمیده ینی نمیتونه دیکد کنه،حالا من یه کاری کردم که به جای صفر قرار میده O و به جای یک l میزاره ولی میخاسم ببینم میتنید کمک کنید که نیازی نباشه کاراکتر جایگزین کنم و با همون اعداد عمل کنه؟
خیلی ممنون
این برنامه ی خودمه
using System;
using System.Collections.Generic;
using System.Text;
namespace run
{
class Program
{
static void Main(string[] args)
{
string input = "111111111111111100110000";
Console.WriteLine(Encode(input));//Outputs: 12W1B12W3B24W1B14W
Console.WriteLine(Decode(Encode(input)));//Outputs: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW
Console.ReadKey();
}
public static string Encode(string s)
{
StringBuilder sb = new StringBuilder();
int count = 1;
char current = s[0];
for (int i = 1; i < s.Length; i++)
{
if (current == s[i])
{
count++;
}
else
{
sb.AppendFormat("{0}{1}", count, (current == '1' ? 'l' : 'O'));
count = 1;
current = s[i];
}
}
sb.AppendFormat("{0}{1}", count, (current == '1' ? 'l' : 'O'));
return sb.ToString();
}
public static string Decode(string s)
{
string a = "";
int count = 0;
StringBuilder sb = new StringBuilder();
char current = char.MinValue;
for (int i = 0; i < s.Length; i++)
{
current = s[i];
if (char.IsDigit(current))
a += current;
else
{
count = int.Parse(a);
a = "";
for (int j = 0; j < count; j++)
sb.Append((current == 'l' ? '1' : '0'));
}
}
return sb.ToString();
}
}
}
اینم برنامه ی اولیه که فط در مورد حروف جواب میده
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace run
{
class Program
{
static void Main(string[] args)
{
string input = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW";
Console.WriteLine(Encode(input));//Outputs: 12W1B12W3B24W1B14W
Console.WriteLine(Decode(Encode(input)));//Outputs: WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWW WWBWWWWWWWWWWWWWW
Console.ReadLine();
}
public static string Encode(string s)
{
StringBuilder sb = new StringBuilder();
int count = 1;
char current = s[0];
for (int i = 1; i < s.Length; i++)
{
if (current == s[i])
{
count++;
}
else
{
sb.AppendFormat("{0}{1}", count, current);
count = 1;
current = s[i];
}
}
sb.AppendFormat("{0}{1}", count, current);
return sb.ToString();
}
public static string Decode(string s)
{
string a = "";
int count = 0;
StringBuilder sb = new StringBuilder();
char current = char.MinValue;
for (int i = 0; i < s.Length; i++)
{
current = s[i];
if (char.IsDigit(current))
a += current;
else
{
count = int.Parse(a);
a = "";
for (int j = 0; j < count; j++)
sb.Append(current);
}
}
return sb.ToString();
}
}
}