30/09/2018, 18:53
Làm sao để nối chuỗi 2 vào chuỗi 1 kiểu char và kiểu string
đầu tiên là kiểu char
- VD em đang có char s1[5], s2[5]
gán s1= 12345
gán s2= 67890
bây giờ em muốn nối s2 vào s1
và s1 trờ thành s1=1234567890
thì phải khắc phục cách khai báo ntn để đc kết quả như trên… kiểu như danh sách liên kết ý k cần biết có bnhiu phần tử cứ dùng bnhiu thì cấp phát bấy nhiêu
thứ 2 là kiểu string
string thì k dùng đc cái strcat rồi vậy thì nối ntn ạ
tks em xin chân thành cảm ơn
Bài liên quan
Xử lý nối mấy chuỗi char trong C là cả cực hình đó, có std::string thì làm thế này cho lẹ:
+= luôn đc ạ… k cần định nghĩa lại += à
std::string có sẵn mà bạn, nối được cả kiểu char luôn:
http://www.cplusplus.com/reference/string/string/operator+=/
(Dùng std::wstring là lưu được cả Tiếng Việt, phần tử con là wchar_t)
Nếu bạn muốn ghép nhiều string 1 lần luôn (Giống hàm String.Concat của DotNet) thì nên dùng cái này.
à string thì ngon rồi không ngờ nó làm đc kiểu đấy hơn hẳn kiểu char
thế h mình k muốn dùng kiểu string nữa mà muốn dùng kiểu char *a thì k biết có khắc phục đc cái độ dài kia k nhỉ
bác nào thông giúp e câu này cái
bác nào có thể vd cho e 1 cái code sự dụng char *s; đc không ạ em cảm ơn
String(const String&);
câu lệnh trên nghĩa là gì ạ
char *s là khai báo cho trỏ mà.
std::string nó làm được vậy do trong class nó auto hết cho mình rồi, còn dùng char* thì phải tự lo về vấn đề bộ nhớ thôi (trừ khi bạn viết hẳn một class như std::string)
Muốn xài char* mà nhập bất kỳ thì cấp phát động bộ nhớ:
Bạn học class constructor là hiểu.
thật đúng là quý hơn vàng
mình rất rất cảm ơn… nó đã cứu sống mình ^^!
mà bác đăng code c nên kiểu j mà nó màu mè thế
mình đăng nên nó như chữ viết thông thường
a = new char[3]
câu lệnh trên là có phải cấp cho a 1 vùng nhớ kiểu char có tối đa là 3 kí tự k ạ
tức là khi mình nhập a= 123 vẫn oke đúng k ạ
Không được, trong C++ không có thể loại gán chuỗi char ngon ơ thế đâu (trừ khi bạn overload toán tử), gán chuỗi char tốt nhất cứ dùng strcpy.
Cái đó đúng ra là cấp phát trên vùng nhớ heap 3 byte ứng với 3 phần tử char, còn a là 1 pointer (1 số nguyên 4 byte hoặc 8 byte nếu là 64 bit) có giá trị là địa chỉ bộ nhớ, trỏ vào vùng nhớ heap đó.
mình không đề cập đến vấn đề gán như thế nào
mặc đinh là mình gán đúng đi
nhưng khi mình cấp cho biến a = new char[3]
thì biến a lúc này lưu được tối đa bnhiu kí tự
hay nói cách khác là char a[3] và a = new char[3] cái số 3 nó có giống nhau không
mặc định cho tất cả cái còn lại đều đúng
cảm ơn bác rất nhiều…
Hai cái đó đều lưu được tối đa 3 ký tự như nhau, chỉ có lưu trữ khác nhau thôi.
nhưng mình có đoạn code ntn
khi mình nhập dodai =3
sau đó nhập tiếp chuỗi 1234567
thì chương trình của mình vẫn in ra 7 kí tự
từ đó mình đoán cái s= new char[size] cái size này không phải là cái size trong char s[size]
đây là code nhé bác sẽ thấy rõ hơn cái kiểu cấp phát new
Cái size đó là size tối đa mà bạn dùng được an toàn, ra khỏi ngưỡng cấp phát thì gọi là buffer overflow. Code bạn bị buffer overflow rồi.
Bạn đang dùng hàm cin.get(char* s, streamsize n) mà bạn đưa 10 vào làm n. Như vậy hàm này hiểu rằng s có thể nhận tối đa an toàn 10 ký tự, mà thực ra chỉ có được ‘dodai’ ký tự an toàn thôi. Phần “4567” trong chuỗi của bạn đã tràn ra khỏi mảng và lấn sang vùng dữ liệu khác rồi.
mình đưa số 10 vào để nhập tối đa đc 10 kí tự để thử cái new char[dodai] thôi. chứ thực chất cái số 10 ý là dodai. cin.get(s,dodai);
mình rất cảm ơn bác… nhờ có bác mà e mới làm đc đoạn code trên
1 lần nữa mình rất cảm ơn
Các bro cho e hỏi vẫn như vậy mà trong c thì em nên làm thế nào ạ? e thử nhiều cái mà không thể ra đúng số như vậy ạ. ai biết chỉ giúp em với. Thanks ạ