Tôi đã nhận thấy đã một năm kể từ khi hoạt động này, nhưng đối với những gì nó đáng giá. I came across an article on CodeProject hôm nay tuyên bố giải quyết vấn đề này - có thể bạn có thể sử dụng ý tưởng từ đó:
Tôi không thể xác minh tính chính xác của nó, nhưng có thể đáng xem.:)
Việc triển khai chắc chắn yêu cầu giữ toàn bộ chuỗi trong bộ nhớ, nhưng bạn có thể dễ dàng làm việc xung quanh (như với bất kỳ triển khai nào khác thực hiện thay thế) miễn là bạn có thể chia đầu vào thành khối và đảm bảo rằng bạn không bao giờ chia ở vị trí bên trong một biểu tượng sẽ được thay thế. (Một cách dễ dàng để làm điều đó trong trường hợp của bạn là để chia ở một vị trí nơi mà các char tiếp theo không phải là bất kỳ ký tự được sử dụng trong một biểu tượng.)
-
Có một lý do ngoài tầm hoạt động (mặc dù đó là một lý do đầy đủ trong cuốn sách của tôi) để thêm phương thức "ReplaceMultiple" vào thư viện chuỗi của một người: Chỉ cần thực hiện thao tác thay thế N lần là KHÔNG chính xác nói chung.
Nếu các giá trị được thay thế cho các ký hiệu không bị hạn chế, giá trị có thể được coi là các ký hiệu trong các hoạt động thay thế tiếp theo. (Có thể có những tình huống mà bạn thực sự muốn muốn điều này, nhưng chắc chắn có những trường hợp bạn không sử dụng. Biểu tượng lạ mắt làm giảm mức độ nghiêm trọng của sự cố, nhưng không giải quyết được vấn đề và "xấu xí" vì các chuỗi được định dạng có thể được người dùng xác định - và do đó không nên yêu cầu các ký tự lạ.)
Tuy nhiên, tôi nghi ngờ có lý do chính đáng. Thao tác "ReplaceMultiple" đơn giản không phải là (rõ ràng) được xác định rõ ràng nói chung.
Để xem điều này, hãy xem xét điều này có thể có nghĩa là để "thay thế 'aa' bằng '!' và 'baa' với '?' trong chuỗi 'abaa' "? Là kết quả 'ab!' hoặc 'a?' - hoặc là một sự thay thế bất hợp pháp?
Có thể yêu cầu ký hiệu là "không có tiền tố", nhưng trong nhiều trường hợp không thể chấp nhận được. Nói rằng tôi muốn sử dụng điều này để định dạng một số văn bản mẫu. Và nói rằng mẫu của tôi là dành cho mã. Tôi muốn thay thế "§table" bằng tên bảng cơ sở dữ liệu chỉ được biết khi chạy. Sẽ rất khó chịu nếu bây giờ tôi không thể sử dụng "§t" trong cùng một mẫu. Kịch bản lệnh có thể là một cái gì đó hoàn toàn chung chung, và một ngày nào đó tôi gặp khách hàng thực sự sử dụng "§" trong tên bảng của mình ... có khả năng làm cho thư viện mẫu của tôi thay vì ít hữu dụng hơn.
Một giải pháp tốt hơn có thể là sử dụng trình phân tích cú pháp đệ quy thay vì chỉ thay thế các chữ cái. :)
Nguồn
2012-01-13 11:58:13
Chuỗi đến từ đâu? – JoshD
Như chúng ta biết 'O (n) + O (n)' vẫn là 'O (n)', động lực * thực * ở đây là gì? – Arun
Chuỗi/dữ liệu thực tế có khả năng là 100 GB kích thước, được xử lý từng bước và trong khi gọi thay thế hai lần vẫn là O (n), n là khá lớn. –