PDA

View Full Version : فشرده سازی یک متن از طریق طول اجرا



Naderenator
سه شنبه 04 دی 1386, 13:55 عصر
کد زیر یک متن را از فایل Source.txt خوانده و به صورت طول اجرا فشرده سازی می کند
اما خطای زیر را در سی شارپ می دهد
Index was outside the bounds of the array.
الگوریتم در c++ کارمی کند اما در سی شارپ نه. کسی می تونه ایرادش چیه لطفا :عصبانی++:
اینم کداش
string line;
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("source.txt");
while ((line = file.ReadLine()) != null)
{
int i = 0, counter = 1,le,j;
line.ToCharArray();
le = line.Length;
while (i<le)
{
j = i++;
if (line[i] == line[j])
counter++;
if (line[i] != line[j])
{
listBox1.Items.Add(line[i]);
listBox2.Items.Add(counter);
counter = 1;
}
i++;
}
}
file.Close();

سار
سه شنبه 04 دی 1386, 13:56 عصر
کدت رو درون تگ Code قرار بده

ir_programmer
سه شنبه 04 دی 1386, 14:05 عصر
رعایت این مطلب بسیار مهمه.


string line;
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("source.txt");
while ((line = file.ReadLine()) != null)
{
int i = 0, counter = 1,le,j;
line.ToCharArray();
le = line.Length;
while (i<le)
{
j = i++;
if (line[i] == line[j])
counter++;
if (line[i] != line[j])
{
listBox1.Items.Add(line[i]);
listBox2.Items.Add(counter);
counter = 1;
}
i++;
}
}
file.Close();

توسعه نویس
سه شنبه 04 دی 1386, 23:56 عصر
درون حلقه while در آخرین بار اجرا درست زمانی که i یک شماره از le کوچکتر هست ، برای آخرین بار حلقه اجرا میشود و درست در قسمت j = i++; متغییر i یک واحد بعد از انتصاب اضافه میشود و بدین صورت با le مساوی میشود و چون آرایه ها با صفر شروع میشوند باید آخرین ایندکس یک واحد از طول آرایه کمتر باشد. که اگر نباشد همان خطایی پیش میاید که شما مواجه شدید.:لبخند: