Giúp mình Viết chương trình nhập một xâu ký tự. Thực hiện thao tác sao chép xâu tại vị trí bất kỳ.

2 câu trả lời

Ví dụ :Xâu abCdAbcD sẽ cho ra xâu abcdabcd.

 

Uses Crt;

Var  St:String;

        i:Byte;

Begin

    Write(‘Nhap xau St: ‘); Readln(St);

    For i:=1 to length(St) do

        If St[i] IN [‘A’..’Z’] Then St[i]:=CHR(ORD(St[i])+32);

    Write(‘Xau ket qua: ‘, St);

    Readln;

End.

Hàm memset sẽ giúp chúng ta lấp vào một số ô nhớ liên tiếp nhau trong mảng kí tự bằng một giá trị xác định. Dưới đây là khai báo của hàm memset:

void* memset( void *ptr, int value, size_t num);

Các bạn có thể hiểu hàm memset thiết lập num bytes ô nhớ đầu tiên bắt đầu từ địa chỉ ptr bằng giá trị value định sẵn. Ví dụ như sau:

char foo[] = "Almost every programmer should know memset!"; cout << foo << endl; memset(foo, '-', 7); cout << foo << endl;

Sau khi chạy đoạn chương trình này, kết quả mình nhận được trên màn hình console là 2 dòng text như sau:

Almost every programmer should know memset! -------every programmer should know memset!

Như vậy, 7 bytes đầu tiên (tương đương với 7 kí tự trong mảng foo) đã bị hàm memset thiết lập bằng kí tự dấu trừ.

Chúng ta cũng thường sử dụng hàm memset để khởi tạo toàn bộ mảng kí tự bằng một giá trị xác định nào đó.

char foo[20]; memset(foo, 'a', sizeof(foo)); foo[sizeof(foo) - 1] = '\0'; //Don't forget to set the ending character at the end of C-style string.

Với đoạn code này, mảng kí tự foo sẽ được lấp toàn bộ mảng bằng kí tự a, và kí tự cuối cùng sẽ được thiết lập là kí tự kết thúc chuỗi như mình đã trình bày trong bài học về mảng kí tự.

Xem độ dài của chuỗi kí tự

Các bạn cần phân biệt rõ số lượng ô nhớ được cấp phát cho mảng kí tự sizeof(c_string) và độ dài của chuỗi kí tự (length of c_string).

Độ dài của chuỗi kí tự được tính từ kí tự đầu tiên cho đến kí tự kết thúc chuỗi ('\0'), trong khi đó, số lượng ô nhớ được cấp phát cho mảng kí tự được trả về thông qua toán tử sizeof.

Để lấy được giá trị là độ dài của chuỗi kí tự được lưu bên trong mảng kí tự, chúng ta có thể sử dụng hàm strlen được khai báo như sau:

size_t strlen ( const char * str );

Hàm strlen nhận vào tên mảng kí tự mà các bạn muốn lấy độ dài và trả về một số nguyên là độ dài chuỗi kí tự lưu trong mảng. Ví dụ:

char foo[50] = "C++ Programming language"; cout << "Length of foo string: " << strlen(foo) << endl;

Đoạn code trên sẽ cho ra kết quả độ dài của chuỗi kí tự "C++ Programming language" là 24. Trong khi đó, nếu các bạn dùng toán tử sizeof(foo) thì kết quả sẽ là 50, vì mình yêu cầu cấp phát 50 ô nhớ cho mảng kí tự foo.

Sao chép mảng kí tự

Khi sử dụng thư viện cstring, chúng ta có 2 cách để sao chép chuỗi kí tự từ một mảng kí tự sang mảng kí tự khác.

Sử dụng hàm strcpy

Khai báo của hàm strcpy trong thư viện cstring:

char * strcpy ( char * destination, const char * source );

Hàm strcpy cho phép bạn sao chép toàn bộ chuỗi kí tự được lưu bên trong mảng kí tự source sang mảng kí tự destination.

Ví dụ:

char str_source[] = "This is source string"; char str_destination[30]; strcpy(str_destination, str_source); cout << "str_destination: " << str_destination << endl;