Cịc bội toịn xỏ lý trến String

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 105 - 117)

để so sánh hai chuỗi:

o Dùng phương thức tĩnh Equal() hoặc phương thức Equal của lớp string, Trả về giá trị:

true : bằng nhau false: khác nau

o Dùng phương thức CompareTo() hoặc phương thức tĩnh Compare(), Trả về các giá trị: -1: nhỏ hơn 0: bằng nhau 1: lớp hơn o Dùng toán tử so sánh = =. true : bằng nhau false: khác nau Vắ dụ:

using Hue = System.Console; using System;

namespace GiaThuaKep {

class Program {

static void Main() {

HuẹWriteLine("Nhap vao xau s:"); string s = HuẹReadLine();

HuẹWriteLine("Nhap vao xau X:"); string x = HuẹReadLine();

// Phương thức tĩnh của lớp string if (string.Equals(x, s))

{

} else {

HuẹWriteLine("khong bang nhau"); } if (s.Equals(x)) { HuẹWriteLine("Bang nhau"); } else {

HuẹWriteLine("khong bang nhau"); } if (s == x) { HuẹWriteLine("Bang nhau"); } else

HuẹWriteLine("khong bang nhau"); }

// Phương thức thuộc lớp string switch (s.CompareTo(x)) {

case -1: // tra ve -1 nếu s nhỏ hơn x HuẹWriteLine("{0} < {1}",s,x); break ;

case 0: // tra ve 0 nếu

HuẹWriteLine("{0} giong nhau {1}",s,x); break ;

case 1:

HuẹWriteLine("{0} > {1}",s,x); break ;

}

// Phương thức tĩnh của lớp string

// Doi so thu 3 chi ra co phan biet chu hoa va chu thong khong switch (string.Compare(x,s,StringComparison.OrdinalIgnoreCase )) {

case -1:

HuẹWriteLine("{0} < {1}",s,x); break ;

case 0:

HuẹWriteLine("{0} giong nhau {1}",s,x); break ; case 1: HuẹWriteLine("{0} > {1}",s,x); break ; } HuẹReadLine(); } } } Tìm một chuỗi con

để tìm một chuỗi con có trong một chuỗi ta có thể sử dụng phương thức IndexOf tìm vị trắ xuất hiện của một xâu trong xâụ

Vắ dụ: Xây dựng chương trình nhập vào một xâu s và một xâu x. đếm số lần xuất hiện xâu x trong xâu s.

using Hue = System.Console; using System; namespace GiaThuaKep { class Program {

static int demxau2(string s,string x) {

int dem=0,i = 0;

i = s.IndexOf(x, 0, StringComparison.OrdinalIgnoreCase); while ((i >= 0)&&(i<s.Length ))

{ dem++; i = s.IndexOf(x, i + 1, StringComparison.OrdinalIgnoreCase); } return dem; }

static void Main() {

HuẹWriteLine("Nhap vao xau s:"); string s = HuẹReadLine();

string x = HuẹReadLine(); HuẹWriteLine(demxau2(s,x) ); HuẹReadLine(); } } }

Vắ dụ trên ta có thể giải quyết bằng cách sử dụng phương thức Substring() ựể trắch một chuỗi con từ chuỗi ban ựầụ và ựem so sánh với chuỗi cần tìm

using Hue = System.Console; using System;

namespace DemXau {

class Program {

static void Main() {

HuẹWriteLine("Nhap vao xau s:"); string s = HuẹReadLine();

HuẹWriteLine("Nhap vao xau X:"); string x = HuẹReadLine();

HuẹWriteLine("so lan xuat hien xau x tring xau s la: " + DemXau(s,x)); HuẹReadKey();

}

static int DemXau(string s, string x) { int i=0; int dem = 0; while (i<=s.Length-x.Length) { if (s.Substring(i, x.Length).Equals(x, StringComparison.OrdinalIgnoreCase)) { dem++; i = i + x.Length; } else { i++; } } return dem; } }

}

Cắt các ký tự trống

Các phương thức Trim, TrimEnd, TrimStart ựược sử dụng ựể cắt các ký tự trống, Phương thức Remove ựể xóa ựi một số ký tự trong xâu và phương thức IndexOf tìm vị trắ xuất hiện của một xâu trong xâụ

Vắ dụ: Nhập vào một xâu chuẩn hóa xâu sao cho không có ký tự trống ở ựầu xâu và cuối xâu, ở giữa không có hai ký tự trống liên tiếp.

using Hue = System.Console; using System;

namespace GiaThuaKep {

class Program {

static void ChuanCach(ref string s) {

// Tai sao lai phai gan gia trị cho lai cho lai cho s? s = s.Trim();

int i=s.IndexOf(" ",0) ; while (i>=0 )

{

s=s.Remove(i,1); // Nếu tìm thấy 2 ký tự cách liên tiếp thì xóa bớt ựi 1 i=s.IndexOf(" ",i); // Xau " " có hai ký tự cách.

} }

static void Main() {

HuẹWriteLine("Nhap vao xau s:"); string s = HuẹReadLine();

HuẹWriteLine("Xau khi chua chuan:" + s); ChuanCach(ref s);

HuẹWriteLine("Xau khi da chuan :" + s); HuẹReadLine();

} } }

Chia chuỗi

Phương thức Split() của lớp string. Chức năng chắnh là phân tắch một chuỗi ra thành các chuỗi con. để sử dụng Split(), chúng ta truyền vào một mảng các ký tự phân cách, các ký tự này ựược dùng ựể chia các từ trong chuỗị Và phương thức sẽ trả về một mảng những chuỗi con.

Vắ dụ: Nhập vào một dãy các số nguyên ngăn cách nhau bằng dấu phẩy(,). đếm số phần tử của dãy số, số lớn nhất, nhỏ nhất của dãy số vừa nhập. (Vắ dụ: nhập dãy: 4,5,67,8,2)

using Hue = System.Console; using System;

namespace GiaThuaKep {

class Program {

static void Main() {

int[] day;

NhapDay(out day); int dem, max, min;

Dem_Max_Min(day, out dem, out max, out min); HuẹWriteLine("So phan tu day : "+dem );

HuẹWriteLine("Gia trị lon nhat : " + max); HuẹWriteLine("Gia tri nho nhat : " + min); HuẹReadLine();

}

static void NhapDay(out int[] dayso) {

HuẹWriteLine("Nhap vao day so: "); string s = HuẹReadLine();

string[] m;

string[] Ngan={","};

m = s.Split(Ngan ,StringSplitOptions.RemoveEmptyEntries ); dayso = new int[m.Length];

for (int i = 0; i < m.Length; i++) {

dayso[i] = int.Parse(m[i]); }

}

static void Dem_Max_Min(int[] day, out int dem,out int Max,out int Min) {

dem = daỵLength; Max = day[0]; Min = day[0];

for (int i = 1; i < daỵLength; i++) {

if (Max < day[i]) Max = day[i]; if (Min > day[i]) Min = day[i]; }

} } } Vắ dụ áp dụng

Vắ dụ 1: Nhập vào một xâu ký tự s. sau ựó thực hiện các yêu cầu sau: a) đếm tổng số ký tự không phải là ký tự chữ số có trong xâu s b) đếm số lần xuất hiện của xâu Ộmua xuanỢ trong xâu s

c) Chỉ ra trong xâu s một xâu con có ựộ dài lớn nhất chứa toàn các ký tự chữ số.

d) đưa ra màn hình các từ có ở trong xâụ Biết rằng giữa các từ ựược ựặt cách nhau bởi dấu: [Ổ.Ỗ , Ỗ Ổ , Ổ!Ỗ , Ổ?Ỗ , Ổ.Ỗ]

using System; class BaiXau {

static int demKhongChuSo(string s) {

int d=0;

for(int i=0;i<s.Length;++i)

if(!(s[i]>='0' && s[i]<='9')) d++; return d;

}

static int demXauCon(string con, string s) {

int d=0;

for(int i=0;i<s.Length-con.Length+1;++i)

if(string.Compare(con,s.Substring(i,con.Length))==0) d++; return d;

}

static string timXauLon(string s) {

string tmp=""; string max="";

for(int i=0;i<s.Length;++i) {

if(s[i]>='0' && s[i]<'9') tmp=tmp+s.Substring(i,1); else if(tmp.Length>0) { if(max.Length<tmp.Length) max=string.Copy(tmp); tmp=""; } } return max; }

static void hienTu(string s) {

ConsolẹWriteLine("Cac tu co o trong xau"); char[]dau={' ','?','.','!'};

foreach(string con in s.Split(dau)) if(con.Length>0)

ConsolẹWriteLine(con); }

static void Main() {

string s;

ConsolẹWrite("Nhap xau:");s=ConsolẹReadLine(); //Câu a

ConsolẹWriteLine(" So ky tu la:" + demKhongChuSo(s)); //Câu b

ConsolẹWriteLine("So cum tu mua xuan co trong xau:" +demXauCon("mua xuan",s)); //Câu c

ConsolẹWriteLine("Xau can tim la:" + timXauLon(s)); //Câu d

hienTu(s);

ConsolẹReadKey(); }

Vắ dụ 2: Tìm tất cả các số tự nhiên không quá n sao cho số ựó trùng với phần cuối của bình phương chắnh nó. Chẳng hạn:62=36; 252=625

using System; class BaiXau {

static bool KiemTra(long i) {

bool ok;

string s=Convert.ToString(i*i); string con=ịToString();

if(string.Compare(s.Substring(s.Length-con.Length,con.Length),con)==0) ok=true;

else

ok=false; return ok; }

static void Main() {

long n;

ConsolẹWrite("Nhap n=");n=long.Parse(ConsolẹReadLine()); ConsolẹWriteLine("Cac so thoa ma yeu cau bai toan:");

for(long i=1;i<=n;++i) if(KiemTra(i))

ConsolẹWriteLine(i+ "-->"+i*i ); ConsolẹReadKey();

} }

Vắ dụ 3: Nhập vào một xâu ký tự s. Sau ựó thực hiện các yêu cầu sau:

a) Xoá ựi trong xâu s các dấu cách thừa: ở bên trái, bên phải và dấu cách thừa ở giữa xâu, gữa các từ chỉ ựể lại một dấu cách

b) Xoá ựi tất cả các xâu con có nội dung là Ộmua xuanỢ có ở trong xâu s c) Sắp xếp các từ trong xâu s theo thứ tự từ ựiển

d) đếm tần xuất xuất hiện của các từ có trong xâu s Chú ý: Từ là các ký tự viết liền nhau và cách nhau bởi dấu cách

using System; 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 Xoa(string con, string s) {

string tmp=string.Copy(s); while(tmp.IndexOf(con)>0)

tmp=tmp.Remove(tmp.IndexOf(con),con.Length); return tmp;

}

static void catTu(string s,ref string []tu) {

int d=0;

foreach(string con in s.Split(' ')) if(con.Length>0)

{

ArraỵResize(ref tu,++d);

tu[d-1]= con;

} }

static string sapXep(string []tu) {

ArraỵSort(tu); string tmp=""; for(int i=0;i<tụLength;++i) tmp=tmp+" "+tu[i]; return tmp;

}

static void tanXuat(string []tu) { string []tmp=null; int i,j,d=0; bool ok; for(i=0;i<tụLength;++i) { ok=true; for(j=0;j<d;++j)

if(string.Compare(tmp[j],tu[i])==0) ok=false;

if(ok)

{

ArraỵResize(ref tmp,++d);

tmp[d-1]=string.Copy(tu[i]);

}

}

ConsolẹWriteLine("Tan xuat xuat hien cua cac tu la:"); for(j=0;j<tmp.Length;++j)

{

d=0;

for(i=0;i<tụLength;++i)

if(d>0) ConsolẹWriteLine("Tu {0} xuat hien {1} lan",tmp[j],d);

} }

static void Main() {

string s,tmp;

ConsolẹWrite("Nhap xau:");s=ConsolẹReadLine();

//Cau a

tmp=Trim(s);

ConsolẹWriteLine("Xau sau khi xoa:{0}",tmp);

//Cau b

tmp=Xoa("mua xuan",s);

ConsolẹWriteLine("Xau sau khi xoa:{0}",tmp);

//Cau c

string []tu=null;

catTu(s,ref tu);

ConsolẹWriteLine("Xau sau khi sap xep:"+sapXep(tu));

//Cau d

tanXuat(tu);

ConsolẹReadKey();

} }

BộI 20 : KIÓU Dọ LIỷU XằU VắI NéI DUNG THAY ậữI ậẩĩC (STRINGBUILDER)

20.1. Khai bịo vộ sỏ dông

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 ựổị 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();

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ếụ

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ỗị 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:

Một phần của tài liệu Đề cương bài giảng cơ sở kỹ thuật lập trình ngôn ngữ c (Trang 105 - 117)

Tải bản đầy đủ (PDF)

(135 trang)