Em đang ôn lại C++.
Cho em hỏi string và mảng char khác nhau như thế nào?
Khi làm bài tập về xâu thì nên dùng mảng char hay String? Dùng cái nào tối ưu hơn (tgian chạy)?
Hỏi về sự khác nhau của string và mảng char và nên dùng cái nào?
Theo mình hiểu thì.
Nếu mảng mà bạn dùng string thì sẽ lưu được từ hoặc chuỗi ví dụ như string arrayString = [mot, hai, ba]
Sẽ có 2 phần tử trong mảng trên.
Nếu mảng mà bạn dùng char thì chỉ lưu được ký tự mà thôi ví dụ như char arrayChar = [m,o,t,h,a,i,b,a]
Sẽ có 7 phần từ trong mảng trên.
Còn làm bài tập thì theo như trên mà bạn quyết định.
^ Làm gì có chuyện đó.
Bạn viết code mới thì dùng std::string
thôi.
Vả lại std::string
có khả năng:
- Đọc độ dài nhanh (một số tác vụ được tăng tốc)
- Truy cập ngẫu nhiên
- Tự co giãn
- Tự tiêu - So sánh bằng toán tử < > =
- Có thể feed vào lib C với method
c_str()
Lưu ý: Khi bạn ráp chuỗi nên dùng std::stringstream
.vì mỗi std::string
có tối thiểu (overhead) 24 byte. http://jovislab.com/blog/?p=76
Em cảm ơn.
Vậy cho em hỏi thêm chút nữa.
Trong Đây có viết một bài về các hàm xử lý xâu.
Thao tác về xâu (copy, ins, del, rev), giữa string và mảng char cái nào đơn giản hơn, Ok hơn, an toàn hơn?
C string: em phải biết kích cỡ của mảng ký tự, phải nhớ chèn null vào cuối chuỗi
std::string: vô tư
copy:
std::string s1 = "hello";
std::string s2;
s2 = s1; //copy s1 vào s2
insert:
std::string s1 = "hello ";
std::string s2 = "world";
s1 += s2; //insert s2 vào s1
insert nhanh:
std::ostringstream oss;
oss << "hello" << " " << "world" << "!" << "\n";
std::string s = oss.str(); //s = "hello world!\n"
xóa toàn bộ chuỗi
s.clear();
xóa 1 phần chuỗi
std::string s = "daynhauhoc"
s.erase(3, 4); //xóa từ index thứ 3 nghĩa là từ chữ 'n', xóa 4 ký tự, s còn lại "dayhoc"
đảo chuỗi:
std::string s = "hello";
std::reverse(begin(s), end(s)); //s trở thành "olleh"
Em cảm ơn.
Cho e sửa lại code của anh 1 chút.
std::reverse(begin(s), end(s)); //s trở thành "olleh"
sửa lại là:
std::reverse(s.begin(), s.end()); //s trở thành "olleh"