ฟังก์ชันไลบรารี 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 และอีกวิธีหนึ่งคือวิธีที่ผู้ใช้กำหนด ผู้ใช้กำหนดสามารถมีได้หลายประเภท ขึ้นอยู่กับว่าผู้ใช้ต้องการใช้การต่อสตริงอย่างไร