การต่อสายอักขระ C

C String Concatenation



การต่อสายเป็นกระบวนการที่จะผนวกสตริงที่สองต่อท้ายสตริงแรก ในบทความนี้เราจะพูดถึงวิธีการเชื่อมสตริงใน C โดยใช้วิธีการต่างๆ

ฟังก์ชันไลบรารี C มาตรฐานที่ใช้ในการเชื่อมสตริงคือ strcat()







ต้นแบบฟังก์ชัน:

$char * strcat (str1,str2);

โดยที่ str1 เป็นสตริงแรกและ str2 เป็นสตริงที่สอง ส่งคืนค่าของฟังก์ชันเป็นตัวชี้ไปยังสตริงที่ต่อกัน



ตอนนี้ ด้วยความช่วยเหลือของตัวอย่าง เราจะเห็นว่าการต่อข้อมูลดำเนินการอย่างไร



ตัวอย่างที่ 1:

$ strcat (str1,str2);
โดยที่ str1 คือ เบลล่า
str2 คือ Whitmann

หลังจากการต่อกันของสตริง,สตริงแรกจะเป็น

str1 เบลล่า วิตมันน์
str2 วิตมันน์

ในขณะที่ string2 จะยังคงเหมือนเดิม





ตัวอย่างที่ 2:

$ strcat (str2,str1);
โดยที่ str1 คือ เบลล่า
str2 คือ Whitmann

หลังจากการต่อกันของสตริง,สตริงที่ต่อกันจะเป็น

str1 เบลล่า
str2 เบลล่า วิตมันน์

ในขณะที่ string1 จะยังคงเหมือนเดิม

ประกาศในไฟล์ส่วนหัว C

ฟังก์ชันการจัดการสตริงถูกประกาศภายใต้ headerfile หากต้องการใช้ฟังก์ชันมาตรฐานในการต่อข้อมูล จะต้องรวมไฟล์ส่วนหัวนี้ด้วย



ดังนั้น เราจึงสามารถเชื่อมสตริงเข้าด้วยกันได้สองวิธี หนึ่งคือการใช้ฟังก์ชันไลบรารี C มาตรฐานและอื่น ๆ โดยไม่ต้องใช้ฟังก์ชันไลบรารี C ต่อไปนี้เป็นโปรแกรมตัวอย่างเพื่อสาธิตทั้งสองวิธี การต่อสตริงโดยไม่ใช้ฟังก์ชันไลบรารี C สามารถทำได้หลายวิธี

เราจะพูดถึงสิ่งนั้นเช่นกันในหัวข้อต่อไปพร้อมตัวอย่าง

การต่อกันของสองสตริงโดยใช้ฟังก์ชันไลบรารี C

#รวม

#รวม

#define BUF_SIZE 256
intหลัก()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* บัฟเฟอร์สองสตริง */

printf ('ป้อนสตริงแรกNS'); ] /* พิมพ์ข้อความไปยังคอนโซลเพื่อให้ผู้ใช้ป้อนสตริงที่ 1*/
fgets (S1,BUF_SIZE,stdin); /* เก็บสตริงอินพุตของผู้ใช้ในบัฟเฟอร์ S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('ป้อนสตริงที่สองNS');/* พิมพ์ข้อความให้ผู้ใช้ป้อนสตริงที่ 2*/
fgets (S2,BUF_SIZE,stdin); /* เก็บสตริงอินพุตของผู้ใช้ในบัฟเฟอร์ S2 */
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); /*เรียกใช้ฟังก์ชันมาตรฐานด้วยสตริง S1 และ S2 */

printf ('NSสตริงที่ต่อกันคือ %sNSNS',S1); /*เอาต์พุต : S1 ต่อท้ายด้วย S2 */

กลับ 0;
}

สแนปชอตของโปรแกรมและผลลัพธ์:

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติด้วยความมั่นใจปานกลาง

การต่อกันของสองสตริงโดยไม่ต้องใช้ฟังก์ชันไลบรารี

การใช้ for loop เพื่อคัดลอกสตริงที่สองที่ส่วนท้ายของสตริงแรก

#รวม

#รวม

#define BUF_SIZE 256
intหลัก()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* ประกาศบัฟเฟอร์ S1, S2 สำหรับทั้งสตริง*/
intระยะเวลา= 0,ผม,NS; /*ตัวแปรที่จำเป็นสำหรับการวนรอบ*/

printf ('ป้อนสตริงแรก'); /* พิมพ์ข้อความผู้ใช้เพื่อป้อนสตริงแรก */
fgets (S1,BUF_SIZE,stdin); /* สตริงอินพุตของผู้ใช้จะถูกเก็บไว้ใน S1*/
S1[ strlen (S1)-1] = ' 0';

printf ('ป้อนสตริงที่สอง'); /* พิมพ์ข้อความผู้ใช้เพื่อป้อนสตริงที่สอง */
fgets (S2,BUF_SIZE,stdin); /* สตริงอินพุตของผู้ใช้จะถูกเก็บไว้ใน S2*/
S2[ strlen (S2)-1] = ' 0';
/* ข้ามสตริงแรกเพื่อค้นหาความยาวของ S1*/
สำหรับ(ผม=0;S1[ผม]! =' 0';ผม++)
{
ระยะเวลา=ระยะเวลา+1;
}

/*ความยาวจะมีจุดสิ้นสุดของ S1 เริ่มจากความยาวและคัดลอก S2 ทั้งหมดไปยัง S1*/
สำหรับ(ผม=ระยะเวลา,NS=0;S2[NS]! =' 0';ผม++,NS++)
{
S1[ผม]=S2[NS];
S1[ผม]=' 0';
}

/*พิมพ์ S1 , แบ่งผลลัพธ์ */
printf ('NSสตริงที่ต่อกันคือ %sNSNS',S1);
กลับ 0;
}

สแนปชอตของโปรแกรมและผลลัพธ์:

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

อีกวิธีหนึ่งในการไม่มีฟังก์ชันห้องสมุด

การต่อข้อมูลโดยใช้การเรียกซ้ำ:

ฟังก์ชัน stringconcatenate() จะใช้เพื่อรับความยาวของ string1 หาก S2 ว่างเปล่า อักขระว่างจะถูกกำหนดให้กับ S2

หากไม่ได้กำหนดอักขระ null ให้กับ S2 มากกว่าการเพิ่มองค์ประกอบของ S2 ที่ส่วนท้ายของ S1 นั่นคือ S1[i+j]=S2[j] สิ่งนี้จะเพิ่มค่าของ i ในสตริง

ฟังก์ชันจะถูกเรียกตัวเองโดยส่งสตริงที่ปรับปรุงใหม่ (S1,S2) เป็นอาร์กิวเมนต์ มันจะถูกเรียกซ้ำแล้วซ้ำอีกจนกว่า S2 จะว่างเปล่า

S1 ที่ต่อกันจะถูกพิมพ์โดย main() as

#รวม

#รวม

#define BUF_SIZE 256

/* ฟังก์ชันเรียกซ้ำเพื่อใช้การต่อสตริงตามคำอธิบายข้างต้น */
โมฆะstringconcatenate(char *S1,char *S2)
{
คงที่ intผม=0;
คงที่ intNS;
NS= strlen (S1);
ถ้า(!S2[ผม])
{
S2[ผม]=' 0';
}
อื่น
{
S1[NS] =S2[ผม];
S1[NS+1] = ' 0';
ผม++;
stringconcatenate(S1,S2);
}
}
intหลัก()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('ป้อนค่าของสตริงแรก:'); /* ข้อความผู้ใช้ป้อนสตริงที่ 1 */
fgets (S1,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงแรก เก็บใน S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('ป้อนค่าของสตริงที่สอง:'); /* ข้อความผู้ใช้ป้อนสตริงที่ 2 */
fgets (S2,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงแรก เก็บใน S2 */
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); /* เรียกใช้ฟังก์ชันด้วย S1,S2 เป็นพารามิเตอร์ */

printf ('การรวมสตริง ='%s'NS',S1);
กลับ 0;
}

สแนปชอตของโปรแกรมและผลลัพธ์:

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

การต่อกันโดยใช้ฟังก์ชัน

ฟังก์ชัน strconcatenate() ถูกเรียกโดย main() เพื่อรวมสองสตริงเข้าด้วยกัน

ฟังก์ชันรับความยาวของ string1 โดยใช้ stringlen(string1)

เชื่อมองค์ประกอบของ string2[i] ใน string1[i+j] ขั้นตอนนี้จะถูกทำซ้ำจนกว่าสตริงจะว่างเปล่า ที่นี่ เราเชื่อม string2 กับ string1 ที่ส่วนท้ายของ string1

สตริงที่ต่อกัน (สตริง 1) จะได้รับเมื่อสิ้นสุดการวนซ้ำ for วนซ้ำทั้งหมด

main() พิมพ์สตริงที่ต่อกัน S1

#รวม

#รวม

#define BUF_SIZE 256

/* ฟังก์ชั่นเพื่อใช้การต่อสตริงตามคำอธิบายข้างต้น */
โมฆะstrconcatenate(char *string1, char*string2)
{
intผม;
intNS= strlen (string1);
สำหรับ(ผม=0;สตริง2[ผม];ผม++)
{
string1[ผม+NS]=string2[ผม];
}
string1[ผม+NS]= ' 0';
}
intหลัก()
{
charstring1[BUF_SIZE],string2[BUF_SIZE];
printf ('ป้อนสตริงแรก:'); /* ข้อความผู้ใช้สำหรับสตริงที่ 1 */
fgets (string1,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงที่สอง เก็บไว้ใน string1 */
string1[ strlen (string1)-1] = ' 0';

printf ('ป้อนสตริงที่สอง:'); /* ข้อความผู้ใช้สำหรับสตริงที่ 2 */
fgets (string2,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงที่สอง เก็บไว้ใน string2 */
string2[ strlen (string2)-1] = ' 0';

strconcatenate(string1,string2); /* เรียกใช้ฟังก์ชันด้วย string1 และ string2 เป็นอาร์กิวเมนต์*/

printf ('สตริงผลลัพธ์ = %s'NS',string1);
กลับ 0;
}

สแนปชอตของโปรแกรมและผลลัพธ์:

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

การต่อสตริงโดยใช้ memcpy

ด้วยการใช้ฟังก์ชัน memcpy() การต่อสตริงทำได้โดยการคัดลอกทีละคำจากบัฟเฟอร์สตริงหนึ่งไปยังจุดสิ้นสุดของบัฟเฟอร์สตริงอื่น โดยที่ขนาดคำคือ 4 ไบต์ เมื่อพิจารณาว่าเรากำลังทำงานบนเครื่อง 32 บิต ในขณะที่เราทำการต่อสตริงด้วย การใช้การต่อสตริงโดยใช้ฟังก์ชัน strcat() การต่อข้อมูลทำได้โดยการคัดลอกไบต์ต่อไบต์จากบัฟเฟอร์สตริงหนึ่งไปยังบัฟเฟอร์สตริงอื่น

วิธีนี้มีประสิทธิภาพการทำงานอย่างมีประสิทธิภาพ

การพิจารณาเพียงอย่างเดียวในขณะที่ใช้ memcpy คือการดูแล ''

โปรแกรม C เพื่อให้ได้ strcat ด้วย memcpy:

#รวม

#รวม

#define BUF_SIZE 256

โมฆะ strcat_memcpy(char *S1, char *S2)
{
intความยาว1,ความยาว2;
ความยาว1= strlen (S1);
ความยาว2= strlen (S2);
memcpy (S1+ความยาว1,S2,ความยาว2);
}
intหลัก()
{

charstring1[BUF_SIZE],string2[BUF_SIZE];
printf ('ป้อนสตริงแรก:'); /* ข้อความผู้ใช้สำหรับสตริงที่ 1 */
fgets (string1,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงที่สอง เก็บไว้ใน string1 */
string1[ strlen (string1)-1] = ' 0';

printf ('ป้อนสตริงที่สอง:'); /* ข้อความผู้ใช้สำหรับสตริงที่ 2 */
fgets (string2,BUF_SIZE,stdin); /* ผู้ใช้ป้อนสตริงที่สอง เก็บไว้ใน string2 */
string2[ strlen (string2)-1] = ' 0';

strcat_memcpy(string1,string2); /* เรียกใช้ฟังก์ชันด้วย string1 และ string2 เป็นอาร์กิวเมนต์*/

printf ('สตริงผลลัพธ์ = %s'NS',string1);
กลับ 0;


}

สแนปชอตของโปรแกรมและผลลัพธ์:

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

คำอธิบายข้อความสร้างขึ้นโดยอัตโนมัติ

บทสรุป:

ด้วยการสนทนาทั้งหมดนี้ เราสามารถสรุปการต่อสตริงใน C ได้ เราได้เห็นตัวอย่างและโปรแกรมตัวอย่างมากมายสำหรับการต่อสตริงสตริง เราจะเรียกคืนรายการหลัก: มีสองวิธีหนึ่งที่มีมาตรฐาน C และอีกวิธีหนึ่งคือวิธีที่ผู้ใช้กำหนด ผู้ใช้กำหนดสามารถมีได้หลายประเภท ขึ้นอยู่กับว่าผู้ใช้ต้องการใช้การต่อสตริงอย่างไร