Xâu Kí Tự Trong C

     
Xâu cam kết Tự vào C++

Trong tất cả các chương trình họ đã thấy đến đến giờ, chúng ta chỉ sử dụng các biến kiểu số, chỉ dùng để biểu diễn các số. Nhưng mặt cạnh các biến kiểu số còn có các xâu kí tự, chúng cho phép họ biểu diễn các chuỗi kí tự như là những từ, câu, đoạn văn bản... Mang đến đến giờ họ mới chỉ sử dụng chúng dưới dạng hằng chứ chứa niềm nở đến những biến tất cả thể chứa chúng.

Trong C++ không có kiểu dữ liệu cơ bản để lưu các xâu kí tự. Để tất cả thể thỏa mãn nhu cầu này, người ta sử dụng mảng có kiểu char. Hãy nhớ rằng kiểu dữ liệu này (char) chỉ gồm thể lưu trữ một kí tự đơn, bởi vậy nó được sử dụng để tạo ra xâu của các kí tự đơn.

Ví dụ, mảng sau (hay là xâu kí tự):

char jenny <20>;

có thể lưu một xâu kí tự với độ lâu năm cực đại là đôi mươi kí tự. Bạn có thể tưởng tượng nó như sau:

*

Kích thước cực đại này không cần phải luôn luôn sử dụng đến. Ví dụ, jenny tất cả thể lưu xâu "Hello" hay "Merry christmas". Vì những mảng kí tự tất cả thể lưu những xâu kí tự ngắn hơn độ nhiều năm của nó, vào C++ đã bao gồm một quy ước để kết thúc một nội dung của một xâu kí tự bằng một kí tự null, bao gồm thể được viết là "".

Chúng ta có thể biểu diễn jenny (một mảng có 20 phần tử kiểu char) lúc lưu trữ xâu kí tự "Hello" và "Merry Christmas" theo cách sau:

*

Chú ý rằng sau nội dung của xâu, một kí tự null ("") được cần sử dụng để báo hiệu kết thúc xâu. Những ô color xám biểu diễn những giá trị ko xác định.




Bạn đang xem: Xâu kí tự trong c

Khởi tạo các xâu kí tự.

Vì những xâu kí tự là những mảng bình thường đề xuất chúng cũng như các mảng khác. Ví dụ, nếu bọn họ muốn khởi tạo một xâu kí tự với những giá trị xác định họ có thể làm cho điều đó tương tự như với các mảng khác:

char mystring<> = "H", "e", "l", "l", "o", "" ;

Tuy nhiên, bọn họ có thể khởi tạo giá bán trị đến một xâu kí tự bằng biện pháp khác: sử dụng các hằng xâu kí tự.

Trong các biểu thức bọn họ đã sử dụng trong những ví dụ trong số chương trước các hằng xâu kí tự để xuất hiện vài ba lần. Bọn chúng được biểu diễn vào cặp ngoặc kép ("), ví dụ:

"the result is: "

là một hằng xâu kí tự họ sử dụng ở một số chỗ.

Không giống như dấu nháy đơn (") chất nhận được biểu diễn hằng kí tự, cặp ngoặc kép (") là hằng biểu diễn một chuỗi kí tự liên tiếp, với ở cuối chuỗi một kí tự null ("") luôn được tự động thêm vào.

Xem thêm: Chuong Tu Di Lam Chuyen Ay Tren Bai Bien, Chương Tử Di Lả Lơi Với Người Tình Trên Biển



Xem thêm: Tác Hại Của Việc Mang Vớ Y Khoa Có Chữa Được Giãn Tĩnh Mạch Không?

Vì vậy chúng ta có thể khởi tạo xâu mystring theo một trong hai giải pháp sau đây:

char mystring <> = "H", "e", "l", "l", "o", "" ;char mystring <> = "Hello";

Trong cả hai trường hợp mảng (hay xâu kí tự) mystring được khai báo với kích thước 6 kí tự: 5 kí tự biểu diễn Hello cộng với một kí tự null.

Trước khi tiếp tục, tôi cần phải nhắc nhở bạn rằng việc gán nhiều hằng như việc sử dụng dấu ngoặc kép (") chỉ hợp lệ khi khởi tạo mảng, tức là thời điểm khai báo mảng. Các biểu thức vào chương trình như:

mystring = "Hello";mystring<> = "Hello";

là ko hợp lệ, cả câu lệnh dưới đây cũng vậy:

mystring = "H", "e", "l", "l", "o", "" ;

Vậy hãy nhớ: bọn họ chỉ bao gồm thể "gán" nhiều hằng mang lại một mảng vào tầm khoảng khởi tạo nó. Lý do là một làm việc gán (=) không thể nhận vế trái là cả một mảng cơ mà chỉ bao gồm thể nhận một trong những phần tử của nó. Vào thời điểm khởi tạo mảng là một trường hợp đặc biệt, bởi vì nó ko thực sự là một lệnh gán mặc dù nó sử dụng dấu bằng (=). 


Gán giá bán trị mang đến xâu kí tự

Vì vế trái của một lệnh gán chỉ tất cả thể là một phần tử của mảng chứ không thể là cả mảng, chúng ta có thể gán một xâu kí tự đến một mảng kiểu char sử dụng một phương pháp như sau:

mystring<0> = "H"; mystring<1> = "e"; mystring<2> = "l"; mystring<3> = "l"; mystring<4> = "o"; mystring<5> = "";

Nhưng cụ thể đây ko phải là một phương pháp thực tế. Để gán giá trị mang đến một xâu kí tự, bọn họ có thể sử dụng loạt hàm kiểu strcpy (string copy), hàm này được định nghĩa trong string.h và gồm thể được gọi như sau:

strcpy ( string1 , string2 );

Lệnh này copy nội dung của string2 thanh lịch string1. string2 tất cả thể là một mảng, bé trỏ xuất xắc một hằng xâu kí tự, bởi vậy lệnh sau đây là một bí quyết đúng để gán xâu hằng "Hello" mang đến mystring:

strcpy (mystring, "Hello");

Ví dụ:

Code:

// setting value lớn string

#include

#include

int main ()

{

char szMyName <20>;

strcpy (szMyName,"J. Soulie");

cout để tất cả thể sử dụng hàm strcpy.

Mặc dù họ luôn gồm thể viết một hàm đơn giản như hàm setstring dưới đây để thực hiện một thao tác giống như strcpy:

Code:

// setting value khổng lồ string

#include

void setstring (char szOut <>, char szIn <>)

int n=0;

do

szOut = szIn;

n++;

while (szIn != 0);

int main ()

{

char szMyName <20>;

setstring (szMyName,"J. Soulie");

cout

int main ()

{

char mybuffer <100>;

cout > để nhận dữ liệu trực tiếp từ đầu vào chuẩn. Phương thức này còn có thể được dùng với những xâu kí tự thay cho cin.getline. Ví dụ, trong chươn trình của chúng ta, khi bọn họ muốn nhận dữ liệu từ người dùng họ có thể viết:

cin >> mybuffer;

lệnh này sẽ làm việc như nó bao gồm những hạn chế sau nhưng mà cin.getline không có:

Nó chỉ có thể nhận những từ đơn (không nhận được cả câu) bởi vì phương thức này sử dụng kí tự trống(bao gồm cả dấu cách, dấu tab và dấu xuống dòng) có tác dụng dấu hiệu kết thúc.. Nó không được cho phép chỉ định kích thước đến bộ đệm. Chương trình của bạn bao gồm thể chạy không ổn định nếu dữ liệu vào lớn hơn kích cỡ của mảng chứa nó.

Vì những lý do trên, khi muốn nhập vào các xâu kí tự bạn phải sử dụng cin.getline thay vì cin >>.