CON TRỎ VÀ CHUỖI4.5|

Một phần của tài liệu Kỹ thuật lập trình 2 Bậc cao đẳng (Trang 42 - 45)

4.5|

Một con trỏ kí tự có thể xem như một biến xâu kí tự, trong đó x}u chính l{ tất cả các kí tự kể từ byte con trỏ trỏ đến cho đến byte '\0' gặp đầu tiên. Vì vậy ta có thể khai b|o c|c x}u dưới dạng con trỏ kí tự như sau.

char *s;

char *s = "Hello";

Các hàm trên xâu vẫn được sử dụng như khi ta khai b|o nó dưới dạng mảng kí tự. Ngồi ra khác với mảng kí tự, ta được phép sử dụng phép gán cho 2 x}u dưới dạng con trỏ, ví dụ:

char *s, *t = "Tin học"; s = t; // thay cho hàm strcpy(s, t); Thực chất phép gán trên chỉ là gán 2 con trỏ với nhau, nó cho phép s bây giờ cũng được trỏ đến nơi mà t trỏ (tức dãy kí tự "Tin học" đ~ bố trí sẵn trong bộ nhớ)

Khi khai báo xâu dạng con trỏ nó vẫn chưa có bộ nhớ cụ thể, vì vậy thơng thường kèm theo khai báo ta cần phải xin cấp phát bộ nhớ cho xâu với độ dài cần thiết. Ví dụ:

char *s = new char[30], *t;

strcpy(s, "Hello"); // trong trường hợp này không cần cấp phát bộ t = s; // nhớ cho t vì t và s cùng sử dụng chung vùng nhớ

nhưng:

char *s = new char[30], *t; strcpy(s, "Hello");

t = new char[30]; // trong trường hợp này phải cấp bộ nhớ cho t vì strcpy(t, s); // có chỗ để strcpy sao chép sang nội dung của s.

Ví dụ: Nhập vào n dịng ký tự và in ra màn hình. //Chương trình nhập vào n dịng ký tự và in ra màn hình #include <iostream> using namespace std; int main() {

char *dong[100]; // khai báo 100 con trỏ kí tự (100 dòng) int i, n;

cout << "so dong = ";

cin >> n; // nhập số dịng thực sự

cin.ignore(); // loại phím Enter trong lệnh cin ở trên

Tài liệu giảng dạy Trang 37

{

dong[i] = new char[80]; // cấp bộ nhớ cho dòng i cin.getline(dong[i],80); // nhập dòng i

}

//In các dòng vừa nhập

cout << "Ban vua nhap " << n << "dong sau: " << endl;

for (i = 0; i < n; i++)

cout << dong[i] << endl; // in kết quả system("pause");

return 0;

}

Kết quả:

Ví dụ: Hàm trả về một chuỗi có thứ tự đảo ngược từ một chuỗi cho trước char* reverseString(char *szString)

{

char *szRevStr = new char[MAX]; int j = 0;

for(int i = strlen(szString) -1 ; i >=0 ; i--) {

*(szRevStr + j++) = *(szString + i); }

return szRevStr; }

Tài liệu giảng dạy Trang 38

5. CẤU TR C

Chương n{y nhằm giúp sinh vie n có the khai báo và khởi tạo bién cáu trúc, truy ca ̣p các phàn tử trong cáu trúc, sử dụng bién con trỏ đe quản lý các bién kie u cáu trúc.

Tài liệu giảng dạy Trang 39

Một phần của tài liệu Kỹ thuật lập trình 2 Bậc cao đẳng (Trang 42 - 45)

Tải bản đầy đủ (PDF)

(77 trang)