
Anonymous
0
0
Sắp xếp tiếng Việt Có một tập tiếng Việt chứa n từ (cụm từ) xếp lộn xộn
- asked 4 months agoVotes
0Answers
0Views
Giải SBT Tin học 11 Bài 8: Lập trình một số thuật toán sắp xếp
Câu Fcs35 trang 59 SBT Tin học 11: Sắp xếp tiếng Việt
Có một tập tiếng Việt chứa n từ (cụm từ) xếp lộn xộn. Em hãy viết chương trình sắp xếp lại n từ (cụm từ) đó theo thứ tự từ điển tiếng Việt để dễ tra cứu.
Dữ liệu: Nhập từ tệp danhsach.txt:
• Dòng đầu tiên chứa số nguyên dương n.
• n dòng sau, mỗi dòng là một xâu biểu thị từ hoặc cụm từ tiếng Việt. Kết quả: Đưa ra tệp Tudien.out:
Gồm n dòng, dòng thứ i in ra từ hoặc cụm từ thứ i theo thứ tự từ điển.
Lời giải:
Em khai báo thư viện locale, sau đó khai báo sử dụng ngôn ngữ tiếng Việt bằng câu lệnh: locale.setlocale(locale.LC_ALL, "vi_VN"). Thư viện này cho phép ta dùng hai hàm như sau:
• locale.strcoll(s1, s2) : so sánh hai xâu và trả về:
– Một số âm nếu s1 đứng trước s2.
- Số 0, nếu s1 giống hệt s2.
– Một số dương nếu s2 đứng trước s1.
locale.strxfrm(s): chuyển đổi một xâu s thành một con số để thuận tiện cho việc so sánh thứ tự.
Câu lệnh locale.strcoll(s1, s2)có thể được viết thành biểu thức locale.strxfrm (s1) < locale.strxfrm (s2).
Trong bài này, đầu tiên em khai báo nhập xuất tệp (phải để mã hoá bằng UTF-8) và sử dụng thư viện locale với ngôn ngữ là tiếng Việt (mã vi_VN hoặc vi). Sau đó, em tạo mảng các xâu s rồi nhập n, tiếp theo em lần lượt nhập n dòng rồi cho vào mảng s. Cuối cùng, em sắp xếp mảng s sau cho strxfrm ( ) của các xâu trong mảng s theo chiều hướng tăng dần (có thể dùng hàm sort với cú pháp như ở dưới) và in ra kết quả.
Chương trình mẫu:
import sys
sys.stdin = open("danhsach.txt", "r", encoding="utf8") sys.stdout open ("Tudien.txt", "w", encoding="utf8") import locale
locale.setlocale (locale. LC ALL, "vi_VN")
n=int (input())
s=[]for i in range (n):
s.append(input())
s.sort (key=locale.strxfrm) for x in s:
print (x)