Kết nối chuỗi C

C String Concatenation



Nối là quá trình nối chuỗi thứ hai vào cuối chuỗi đầu tiên. Trong bài viết này, chúng ta sẽ thảo luận về cách nối các chuỗi trong C bằng cách sử dụng các phương pháp khác nhau.

Hàm thư viện C tiêu chuẩn được sử dụng để nối chuỗi là strcat ().







Nguyên mẫu hàm:

$char * strcat (str1,str2);

trong đó str1 là chuỗi đầu tiên và str2 là chuỗi thứ hai. Giá trị trả về của hàm là con trỏ đến chuỗi được nối.



Bây giờ, với sự trợ giúp của ví dụ, chúng ta sẽ thấy cách nối được thực hiện.



Ví dụ 1:

$ strcat (str1,str2);
Bella ở đâu str1
str2 là Whitmann

sau khi nối chuỗi,chuỗi đầu tiên sẽ là

str1 Bella Whitmann
str2 Whitmann

trong khi string2 sẽ được giữ nguyên.





Ví dụ 2:

$ strcat (str2,str1);
Bella ở đâu str1
str2 là Whitmann

sau khi nối chuỗi,chuỗi nối sẽ là

str1 Bella
str2 Bella Whitmann

trong khi string1 sẽ được giữ nguyên.

Khai báo trong tệp tiêu đề C

Các hàm xử lý chuỗi được khai báo trong tệp tiêu đề. Nếu một người muốn sử dụng hàm tiêu chuẩn để nối, tệp tiêu đề này cần phải được bao gồm.



Do đó, chúng ta có thể ghép chuỗi theo hai cách. Một là sử dụng hàm thư viện C chuẩn và một là không sử dụng hàm thư viện C. Sau đây là các chương trình ví dụ để chứng minh cả hai cách. Việc nối chuỗi mà không sử dụng hàm thư viện C có thể được thực hiện theo nhiều cách.

Chúng ta cũng sẽ thảo luận về điều đó trong các phần tới với ví dụ.

Kết nối hai chuỗi bằng cách sử dụng hàm thư viện C

#bao gồm

#bao gồm

#define BUF_SIZE 256
NSchủ chốt()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Hai bộ đệm chuỗi * /

printf ('Nhập chuỗi đầu tiên '); ] / * In thông báo ra bảng điều khiển để người dùng nhập chuỗi đầu tiên * /
đồ ăn vặt (S1,BUF_SIZE,stdin); / * lưu trữ chuỗi đầu vào của người dùng trong bộ đệm S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Nhập chuỗi thứ hai ');/ * In tin nhắn cho người dùng để nhập chuỗi thứ 2 * /
đồ ăn vặt (S2,BUF_SIZE,stdin); / * lưu trữ chuỗi nhập của người dùng trong bộ đệm S2 * /
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); / * Gọi hàm chuẩn với chuỗi S1 và S2 * /

printf (' Chuỗi liên kết là% s ',S1); / * Đầu ra: S1 được nối với S2 * /

trở lại 0;
}

Ảnh chụp nhanh của chương trình và đầu ra:

Mô tả Văn bản được tạo tự động

Mô tả Văn bản được tạo tự động với độ tin cậy trung bình

Kết nối hai chuỗi mà không cần sử dụng chức năng thư viện

Sử dụng vòng lặp for để sao chép chuỗi thứ hai vào cuối chuỗi đầu tiên.

#bao gồm

#bao gồm

#define BUF_SIZE 256
NSchủ chốt()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Khai báo bộ đệm S1, S2 cho cả chuỗi * /
NSchiều dài= 0,tôi,NS; / * Các biến cần thiết để duyệt qua vòng lặp * /

printf ('Nhập chuỗi đầu tiên'); / * In thông báo người dùng để nhập chuỗi đầu tiên * /
đồ ăn vặt (S1,BUF_SIZE,stdin); / * chuỗi đầu vào của người dùng sẽ được lưu trữ trong S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Nhập chuỗi thứ hai'); / * In thông báo người dùng để nhập chuỗi thứ hai * /
đồ ăn vặt (S2,BUF_SIZE,stdin); / * chuỗi nhập của người dùng sẽ được lưu trữ trong S2 * /
S2[ strlen (S2)-1] = ' 0';
/ * Duyệt chuỗi đầu tiên để tìm độ dài của S1 * /
(tôi=0;S1[tôi]! =' 0';tôi++)
{
chiều dài=chiều dài+1;
}

/ * chiều dài sẽ có phần cuối là S1, bắt đầu từ độ dài và sao chép toàn bộ S2 vào S1 * /
(tôi=chiều dài,NS=0;S2[NS]! =' 0';tôi++,NS++)
{
S1[tôi]=S2[NS];
S1[tôi]=' 0';
}

/ * In kết quả S1, được nối * /
printf (' Chuỗi liên kết là% s ',S1);
trở lại 0;
}

Ảnh chụp nhanh của chương trình và đầu ra:

Mô tả Văn bản được tạo tự động

Mô tả Văn bản được tạo tự động

Một cách khác để không có chức năng thư viện

Kết nối bằng cách sử dụng đệ quy:

Hàm stringconcatenate () sẽ được sử dụng để lấy độ dài của string1. Nếu S2 trống thì ký tự null sẽ được gán cho S2.

Nếu ký tự null không được gán cho S2 hơn là thêm phần tử của S2 vào cuối S1 là S1 [i + j] = S2 [j], điều này làm tăng giá trị của i trong chuỗi.

Một hàm sẽ được gọi chính nó bằng cách chuyển các chuỗi được cải cách (S1, S2) làm đối số. Nó sẽ được gọi đi gọi lại cho đến khi S2 trống.

S1 được nối sẽ được in bởi main () dưới dạng

#bao gồm

#bao gồm

#define BUF_SIZE 256

/ * hàm đệ quy để thực hiện nối chuỗi theo mô tả ở trên * /
vô hiệustringconcatenate(char *S1,char *S2)
{
tĩnh NStôi=0;
tĩnh NSNS;
NS= strlen (S1);
nếu như(!S2[tôi])
{
S2[tôi]=' 0';
}
khác
{
S1[NS] =S2[tôi];
S1[NS+1] = ' 0';
tôi++;
stringconcatenate(S1,S2);
}
}
NSchủ chốt()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Nhập giá trị của chuỗi đầu tiên:'); / * thông báo của người dùng để nhập chuỗi đầu tiên * /
đồ ăn vặt (S1,BUF_SIZE,stdin); / * người dùng nhập chuỗi đầu tiên, lưu trữ trong S1 * /
S1[ strlen (S1)-1] = ' 0';

printf ('Nhập giá trị của chuỗi thứ hai:'); / * thông báo của người dùng để nhập chuỗi thứ 2 * /
đồ ăn vặt (S2,BUF_SIZE,stdin); / * người dùng nhập chuỗi đầu tiên, lưu trữ trong S2 * /
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Gọi hàm với S1, S2 là các tham số * /

printf ('kết hợp của các chuỗi ='% s ' ',S1);
trở lại 0;
}

Ảnh chụp nhanh của chương trình và đầu ra:

Mô tả Văn bản được tạo tự động

Mô tả Văn bản được tạo tự động

Kết nối bằng cách sử dụng các hàm

Hàm strconcatenate () được gọi bởi hàm main () để kết hợp hai chuỗi.

Hàm lấy độ dài của string1 bằng cách sử dụng stringlen (string1).

Nối các phần tử của string2 [i] trong string1 [i + j]. Bước này sẽ được lặp lại cho đến khi chuỗi trống. Ở đây, chúng tôi nối chuỗi2 với chuỗi1 ở cuối chuỗi1.

Chuỗi liên kết (chuỗi 1) sẽ được nhận vào cuối khi tất cả các lần lặp của vòng lặp for sẽ được thực hiện.

Hàm main () in ra chuỗi liên kết S1

#bao gồm

#bao gồm

#define BUF_SIZE 256

/ * hàm để thực hiện nối chuỗi theo mô tả ở trên * /
vô hiệustrconcatenate(char *string1, char*string2)
{
NStôi;
NSNS= strlen (string1);
(tôi=0;dây2[tôi];tôi++)
{
string1[tôi+NS]=string2[tôi];
}
string1[tôi+NS]= ' 0';
}
NSchủ chốt()
{
charstring1[BUF_SIZE],string2[BUF_SIZE];
printf ('Nhập chuỗi đầu tiên:'); / * Thông báo của người dùng cho chuỗi đầu tiên * /
đồ ăn vặt (string1,BUF_SIZE,stdin); / * Người dùng nhập chuỗi thứ hai, được lưu trữ thành chuỗi1 * /
string1[ strlen (string1)-1] = ' 0';

printf ('Nhập chuỗi thứ hai:'); / * Thông báo của người dùng cho chuỗi thứ hai * /
đồ ăn vặt (string2,BUF_SIZE,stdin); / * Người dùng nhập chuỗi thứ hai, được lưu trữ thành string2 * /
string2[ strlen (string2)-1] = ' 0';

strconcatenate(string1,string2); / * Gọi hàm với string1 và string2 là các đối số * /

printf ('Chuỗi kết quả =% s' ',string1);
trở lại 0;
}

Ảnh chụp nhanh của chương trình và đầu ra:

Mô tả Văn bản được tạo tự động

Mô tả Văn bản được tạo tự động

Nối chuỗi bằng cách sử dụng memcpy

Bằng cách sử dụng hàm memcpy (), việc nối chuỗi được thực hiện bằng cách sao chép từng từ từ bộ đệm chuỗi này sang phần cuối của bộ đệm chuỗi khác trong đó kích thước từ là 4 byte coi như chúng ta đang chạy trên máy 32 bit trong khi chúng ta thực hiện nối chuỗi bằng sử dụng nối chuỗi bằng cách sử dụng hàm strcat (), nối được thực hiện bằng cách sao chép từng byte từ bộ đệm chuỗi này sang bộ đệm chuỗi khác.

Cách tiếp cận này hiệu quả về mặt hiệu suất.

Cân nhắc duy nhất khi sử dụng memcpy là quan tâm đến ‘ 0’.

Chương trình C để đạt được strcat với memcpy:

#bao gồm

#bao gồm

#define BUF_SIZE 256

Void strcat_memcpy(char *S1, char *S2)
{
NSchiều dài1,chiều dài2;
chiều dài1= strlen (S1);
chiều dài2= strlen (S2);
memcpy (S1+chiều dài1,S2,chiều dài2);
}
NSchủ chốt()
{

charstring1[BUF_SIZE],string2[BUF_SIZE];
printf ('Nhập chuỗi đầu tiên:'); / * Thông báo của người dùng cho chuỗi đầu tiên * /
đồ ăn vặt (string1,BUF_SIZE,stdin); / * Người dùng nhập chuỗi thứ hai, được lưu trữ thành chuỗi1 * /
string1[ strlen (string1)-1] = ' 0';

printf ('Nhập chuỗi thứ hai:'); / * Thông báo của người dùng cho chuỗi thứ hai * /
đồ ăn vặt (string2,BUF_SIZE,stdin); / * Người dùng nhập chuỗi thứ hai, được lưu trữ thành string2 * /
string2[ strlen (string2)-1] = ' 0';

strcat_memcpy(string1,string2); / * Gọi hàm với string1 và string2 là các đối số * /

printf ('Chuỗi kết quả =% s' ',string1);
trở lại 0;


}

Ảnh chụp nhanh của chương trình và đầu ra:

Mô tả Văn bản được tạo tự động

Mô tả Văn bản được tạo tự động

Phần kết luận:

Với tất cả cuộc thảo luận này, chúng ta có thể kết luận về việc nối chuỗi trong C. Chúng tôi đã thấy nhiều ví dụ và chương trình mẫu để nối chuỗi. Chúng tôi sẽ nhắc lại các mục chính: Có hai cách, một với tiêu chuẩn C và cách khác là cách người dùng xác định. Người dùng xác định có thể có nhiều kiểu, tùy thuộc vào cách người dùng muốn triển khai nối chuỗi.