Chuẩn hóa xâu bằng Pascal - Viết hoa chữ cái đầu tiên và xóa dấu cách (kí tự trắng) thừa

Chuẩn hóa xâu là một bài tập cơ bản khi học đến phần chuỗi của Pascal. Mục đích của việc chuẩn hóa xâu trong Pascal đó là làm cho xâu trở nên rõ ràng và đúng quy tắc hơn. Mặc dù khi thực hiện chuẩn hóa xâu theo đúng quy tắc viết, sẽ bao gồm nhiều việc như kiểm tra tính đúng sai của câu(🙂 ca này khó), kiểm tra tính đúng sai của các kí tự, dấu câu, kí tự trắng, kí tự viết hoa đầu dòng, ... và nhiều công việc khác, Tuy nhiên, trong phần này ta sẽ chỉ tìm hiểu một trong những yêu cầu cơ bản nhất của bài toán chuẩn hóa xâu đó là:

Chuẩn hóa xâu bằng Pascal

Bài toán yêu cầu
Xác định bài toán:

Đầu vào : Xâu bất kì từ bàn phím
Đầu ra :
  • Xóa bỏ kí tự trống (trắng) đầu dòng
  • Xóa bỏ kí tự trống cuối dòng
  • Xóa bỏ kí tự trống không hợp lệ
  • In hoa chữ cái đầu tiên
Các bước thực hiện: Tùy vào yêu cầu của bài toán mà ta sẽ xác định bước chuẩn hóa nào sẽ thực thi đầu tiên. Ví dụ, ở bài toán chuẩn hóa trên, đề yêu cầu chúng ta "viết hoa chữ cái đầu tiên". Vậy thì bước này nhiễm nhiên không thể ưu tiên thực hiện đầu tiên được.😁. Vì trong chuỗi bất kì nhập từ bàn phím, kí tự đầu tiên có thể là một kí tự trắng, việc in hoa kí tự trắng đầu tiên là không cần thiết (mặc dù vẫn có cách để tìm kí tự chữ cái thực sự đầu tiên trong chuỗi để in hoa nó, nhưng chỉ tổ tốn thời gian và code dài dòng). Thay vì vậy, bước in hoa này nên đặt ở cuối cùng, sau khi xâu đã được chuẩn hóa 99% theo đề bài.

Với bài toán này, các bước đúng có thể sắp xếp như sau:
  • Xóa bỏ kí tự trống (trắng) đầu dòng
  • Xóa bỏ kí tự trống cuối dòng
  • Xóa bỏ kí tự trống không hợp lệ
  • In hoa chữ cái đầu tiên
Xác định những hàm và thủ tục thao tác với xâu sẽ sử dụng.

Căn cứ và bài toán trên, ta sẽ sử dụng các hàm và thủ tục sau:
pos() xác định vị trí xuất hiện đầu tiên của xâu nào đó
delete() xóa xâu bất kì trong xâu vừa nhập
upcase() in hoa chữ cái nào đó
length() xác định độ dài của xâu
Bài toán được trình bài dưới Pascal
program codechui;
uses crt;
var xau:string;

begin
	write('Nhap xau: ');
	readln(xau);
    
	{ Xóa kí tự trắng đầu dòng }
	while (xau[1] = ' ') do delete(xau,1,1);
    
    { Xóa kí tự trắng cuối dòng }
    while (xau[length(xau)] = ' ') do delete(xau,length(xau),1);
    
    { Xóa kí tự trống không hợp lệ }
	while (pos('  ',xau) > 0) do delete(xau,pos('  ',xau),1);
	
    { In hoa chữ cái đầu dòng } 
	xau[1] := upcase(xau[1]);
    
	write( 'Xau sau khi chuan hoa la: ',xau);

end.
Kết quả:
Chuẩn hóa xâu bằng Pascal - Viết hoa chữ cái đầu tiên và xóa dấu cách (kí tự trắng) thừa


Ý tưởng của bài viết này không quá khó hiểu. Với việc xóa các kí tự trắng ở đầu và cuối, ta chỉ cần sử dụng vòng lặp while và kiểm tra điều kiện để thực hiện.

Ngoại trừ việc { Xóa kí tự trống không hợp lệ } ta chỉ cần dùng hàm pos() để kiểm tra xem trong chuỗi nhập vào có tồn tại vị trí nào có đến hai kí tự trắng hay không và trả về vị trí xuất hiện đầu tiên của nó. Nếu có thì xóa bớt 1 kí tự trắng tại vị trí xuất hiện đến hai kí tự trắng đó. Và cũng dùng vòng lặp while để kiểm tra cho đến khi không còn vị trí nào xuất hiện đến hai kí tự trắng nữa thì dừng lại.

Để in hoa chữ cái đâu tiên, ta sẽ dùng hàm upcase để in hoa chữ cái đầu tiên , và sau đó gán nó làm kí tự đầu tiên của chuỗi cũ. Vì bản chất xâu chính là một mảng các kí tự nên ta có thể thay đổi giá trị của nó như khi thao tác với mảng.

Tạm thời như vậy, thắc mắc gì thì cứ comment cho tui. Bật thông báo nữa, tui rep trong một buổi tối thôi....

Tìm kiếm trên Google: nhập xâu và viết hoa kí tự đầu pascal