24/05/2018, 23:27

Chuỗi với nội dung thay đổi được (StringBuilder)

Như chúng ta đã biết xâu kiểu string là xấu có nội dung cố định, mỗi khi chúng ta muốn thay đổi nội dung của xâu chẳng qua là chúng ta tạo ra một bản sao và tác động trên bản sao, còn nội dung của xâu gốc không hề thay đổi. Khác với xâu theo kiểu string, ...

Như chúng ta đã biết xâu kiểu string là xấu có nội dung cố định, mỗi khi chúng ta muốn thay đổi nội dung của xâu chẳng qua là chúng ta tạo ra một bản sao và tác động trên bản sao, còn nội dung của xâu gốc không hề thay đổi. Khác với xâu theo kiểu string, xâu kiểu StringBuilder thì nội dung của nó có thể thay đổi được. Muốn sử dụng được StringBilder trước tiên ta phải khai báo : using System.Text;

  • Cách khai báo chuỗi: Để khai báo chuỗi theo kiểu này ta thực hiện như sau:

StringBuilder Tênchuỗi=new StringBuilder();

Ngoài cách này các bạn có thể tham khảo thêm tài liệu để biết thêm về một số cách khai báo khác.

Ví dụ:

StringBuilder s1=new StringBuilder();//Khai báo xâu s1 theo kiểu StringBuilder nhưng chưa có nội dung

StringBuilder s2=new StringBuilder(“Nguyen Huu Dong”); // Khai báo xâu s2 theo kiểu StringBuilder có nội dung khởi tạo là nguyen Huu Dong

Xâu theo kiểu StringBuilder về cơ bản giống như kiểu xâu string nó đều thuộc kiểu dữ liệu tham chiếu.

  • Các thao tác trên chuỗi StringBuilder: Lớp StringBuilder được sử dụng để tạo ra và bổ sung các chuỗi. Hay có thể nói lớp này chính là phần đóng gói của một bộ khởi dựng cho một String. Một số hàm thành viên quan trọng StringBuilder được tóm tắt trong bảng sau:

  • Ví dụ áp dụng

Ví dụ 1: Nhập vào một số nguyên n. Sau đó chuyển số nguyên này sang hệ đếm hexa.

---------------------------------------------------------------------------------------------

using System;

using System.Text;

class BaiXau

{

static void Main()

{

int n;

string x="0123456789ABCDEF";

Console.Write("Nhap n=");n=int.Parse(Console.ReadLine());

StringBuilder s=new StringBuilder();

while(n!=0)

{

s.Insert(0,x[n%16]);

n=n/16;

}

Console.Write("So hexa tuong ung:"+s);

Console.ReadKey();

}

}

---------------------------------------------------------------------------------------------

Ví dụ 2: Nhập từ bàn phím một xâu ký tự s. Sau đó viết hoá ký tự đầu tiên của mỗi từ.

---------------------------------------------------------------------------------------------

using System;

using System.Text;

class BaiXau

{

static string LTrim(string s)

{

string tmp=string.Copy(s);

while(tmp[0]==' ') tmp=tmp.Remove(0,1);

return tmp;

}

static string RTrim(string s)

{

string tmp=string.Copy(s);

while(tmp[tmp.Length-1]==' ') tmp=tmp.Remove(tmp.Length-1,1);

return tmp;

}

static string Trim(string s)

{

string tmp=string.Copy(s);

tmp=LTrim(tmp);tmp=RTrim(tmp);

while(tmp.IndexOf(" ")>0)

tmp=tmp.Remove(tmp.IndexOf(" "),1);

return tmp;

}

static string chuanHoa(string s)

{

string tmp=string.Copy(s);

tmp=tmp.ToLower();

tmp=Trim(tmp);

StringBuilder t=new StringBuilder(tmp);

t[0]=char.ToUpper(t[0]);

for(int i=1;i<t.Length;++i)

if(t[i]==' ') t[i+1]=char.ToUpper(t[i+1]);

tmp=t.ToString();

return tmp;

}

static void Main()

{

string s;

Console.Write("Nhap xau:");s=Console.ReadLine();

s=chuanHoa(s);

Console.WriteLine("Xau sau khi chuan hoa:" +s);

Console.ReadKey();

}

}

---------------------------------------------------------------------------------------------

Ví dụ 3: Xây dựng chương trình tính tổng của hai số nguyên bất kỳ

---------------------------------------------------------------------------------------------

using System;

using System.Text;

class BaiXau

{

static void chuanHoaSo(ref string so1, ref string so2)

{

StringBuilder s1=new StringBuilder(so1);

StringBuilder s2=new StringBuilder(so2);

if(s1.Length>s2.Length)

while(s2.Length<s1.Length)

s2.Insert(0,"0");

else

if(s2.Length>s1.Length)

while(s1.Length<s2.Length)

s1.Insert(0,"0");

so1=s1.ToString();

so2=s2.ToString();

}

static string tinhTong(string so1, string so2)

{

string s;

int t,a,b,nho=0;

int n;

chuanHoaSo(ref so1,ref so2);

StringBuilder kq=new StringBuilder("");

n=so1.Length-1;

while(n>=0)

{

a= so1[n]-48;

b= so2[n]-48;

t=a+b+nho;

s=t.ToString();

if(s.Length==1) s="0"+s;

nho=s[0]-48;

kq.Insert(0,s[1]);

n=n-1;

}

if(nho==1) kq.Insert(0,"1");

return kq.ToString();

}

static void Main()

{

string so1,so2;

StringBuilder x=new StringBuilder("");

StringBuilder y=new StringBuilder("");

StringBuilder s=new StringBuilder("");

Console.WriteLine(" BAN HAY NHAP VAO HAI SO NGUYEN");

Console.Write(" ");so1=Console.ReadLine();

Console.WriteLine("+");

Console.Write(" ");so2=Console.ReadLine();

x.Append('-',so1.Length>so2.Length?so1.Length:so2.Length);

y.Append(' ',Math.Abs(so1.Length-so2.Length));

s.AppendFormat(" {0} ","BAN HAY NHAP VAO HAI SO NGUYEN");

if(so1.Length<so2.Length)

s.AppendFormat(" {0}{1} ",y.ToString(),so1);

else

s.AppendFormat(" {0} ",so1);

s.AppendFormat("{0} ","+");

if(so2.Length<so1.Length)

s.AppendFormat(" {0}{1} ",y.ToString(),so2);

else

s.AppendFormat(" {0} ",so2);

s.AppendFormat(" {0} ",x.ToString());

s.AppendFormat(" {0}",tinhTong(so1,so2));

Console.Clear();

Console.WriteLine(s);

Console.ReadKey();

}

}

---------------------------------------------------------------------------------------------

0