@Su_Su: Chào bạn! Theo ý kiến riêng của tôi, nếu bạn thực sự muốn đi xa hơn trên con đường lập trình, thì bạn phải học được cách gỡ lỗi 1 chương trình (đây là kỹ năng debug, cho dù 1 lập trình viên chuyên nghiệp vẫn phải trao dồi), trước hết đó là chương trình do chính bạn viết. Mà để gỡ lỗi được chương trình, bạn phải hiểu 1 cách chính xác 1 dòng code chạy như thế nào, và bạn có thể chạy từng lệnh của chương trình bằng tay (input -> output). Khi bạn biết được mình viết lỗi chỗ nào, và sửa cho nó đúng lại như cái mình muốn, thì mới tính đến chuyện tìm tòi ra 1 cách làm tốt hơn được.
Về đoạn code của bạn, tôi nhận xét như sau:
- Giống như bạn nhớ lại 1 bài mà người khác đã làm, rồi viết lại. Thực sự học lập trình không nên theo cách này. Bạn phải nắm được cái ý tưởng trong đoạn code của người ta trước. Và hình dung được cái sơ đồ logic/thuật toán đó trong đầu bạn (hoặc phức tạp hơn thì có thể vẽ ra giấy) rồi mới bắt tay vào code. Khi đoạn code chạy không đúng ý mình thì mình cũng có thể dò lại là chỗ nào viết chưa đúng.
- Vấn đề: khi gặp 1 ký tự rỗng, bạn chỉ:
a. Copy ký tự sau đó lên thế chỗ ký tự rỗng
b. Gán ký tự kết thúc chuỗi ở vị trí length
=> Bạn không dịch chuyển những ký tự còn lại (từ vị trí i đến length) lên phía trước 1 vị trí.
- Đoạn code này có nhiều chỗ không tốt, nhưng trước hết bạn nên làm cho cái không tốt này chạy thành công trước đã. Rồi sau đó mới thử tìm cách tốt hơn. Đừng có thấy người khác post đoạn code hay hơn và chạy đúng rồi xài luôn thì sẽ không tiến bộ được đâu.