C Stīgu sasaistīšana

C String Concatenation



Saskaņošana ir process, kurā pirmās virknes beigās tiek pievienota otrā virkne. Šajā rakstā mēs apspriedīsim, kā savienot virknes C, izmantojot dažādas metodes.

Standarta C bibliotēkas funkcija, ko izmanto virkņu savienošanai, ir strcat ().







Funkcijas prototips:

$char * strcat (str1,str2);

kur str1 ir pirmā virkne un str2 ir otrā virkne. Funkcijas atgriešanas vērtība ir rādītājs uz savienoto virkni.



Tagad, izmantojot piemēru, mēs redzēsim, kā tiek veikta savienošana.



1. piemērs:

$ strcat (str1,str2);
kur str1 ir Bella
str2 ir Vitmans

pēc virknes salikšanas,būs pirmā virkne

str1 Bella Vitmane
str2 Vitmans

savukārt virkne2 paliks nemainīga.





2. piemērs:

$ strcat (str2,str1);
kur str1 ir Bella
str2 ir Vitmans

pēc virknes salikšanas,būs savienota virkne

str1 Bella
str2 Bella Vitmane

savukārt virkne1 paliks nemainīga.

Deklarācija C galvenes failā

Virkņu apstrādes funkcijas ir deklarētas galvenē. Ja vēlaties savienot standarta funkciju, šis galvenes fails ir jāiekļauj.



Tādējādi mēs varam panākt virkņu savienošanu divos veidos. Viens ir ar standarta C bibliotēkas funkcijas izmantošanu, bet otrs - neizmantojot C bibliotēkas funkciju. Tālāk ir sniegti programmu piemēri, lai parādītu abus veidus. Virkņu savienošanu, neizmantojot C bibliotēkas funkciju, var īstenot vairākos veidos.

Mēs to apspriedīsim arī nākamajās sadaļās ar piemēru.

Divu virkņu savienošana, izmantojot C bibliotēkas funkciju

#iekļaut

#iekļaut

#definēt BUF_SIZE 256
intgalvenais()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Divi virkņu buferi */

printf ('Ievadiet pirmo virkni n'); ] /* Izdrukājiet ziņojumu konsolē, lai lietotājs varētu ievadīt pirmo virkni*/
fgets (S1,BUF_SIZE,stdin); / * saglabāt lietotāja ievades virkni S1 buferī */
S1[ strlen (S1)-1] = ' 0';

printf ('Ievadiet otro virkni n');/* Drukāt ziņojumu lietotājam, lai ievadītu otro virkni*/
fgets (S2,BUF_SIZE,stdin); / * saglabāt lietotāja ievades virkni S2 buferī */
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); / *Izsauciet standarta funkciju ar virknēm S1 un S2 */

printf (' nSaliktā virkne ir %s n n',S1); / *Izeja: S1 tiek pievienots kopā ar S2 */

atgriezties 0;
}

Programmas un izvades momentuzņēmumi:

Teksta apraksts tiek ģenerēts automātiski

Teksta apraksts tiek automātiski ģenerēts ar vidēju pārliecību

Divu virkņu savienošana, neizmantojot bibliotēkas funkciju

Izmantojiet cilpai, lai kopētu otro virkni pirmās virknes beigās.

#iekļaut

#iekļaut

#definēt BUF_SIZE 256
intgalvenais()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* Deklarējiet buferus S1, S2 abām virknēm*/
intgarums= 0,i,j; /*Mainīgie, kas nepieciešami cilpas šķērsošanai*/

printf ('Ievadiet pirmo virkni'); / * Izdrukājiet lietotāja ziņojumu, lai ievadītu pirmo virkni */
fgets (S1,BUF_SIZE,stdin); /* lietotāja ievades virkne tiks saglabāta S1*/
S1[ strlen (S1)-1] = ' 0';

printf ('Ievadiet otro virkni'); / * Izdrukājiet lietotāja ziņojumu, lai ievadītu otro virkni */
fgets (S2,BUF_SIZE,stdin); /* lietotāja ievades virkne tiks saglabāta S2*/
S2[ strlen (S2)-1] = ' 0';
/* Šķērsojiet pirmo virkni, lai atrastu S1 garumu*/
priekš(i=0;S1[i]! =' 0';i++)
{
garums=garums+1;
}

/*garumam būs S1 beigas, sāciet no garuma un kopējiet visu S2 uz S1*/
priekš(i=garums,j=0;S2[j]! =' 0';i++,j++)
{
S1[i]=S2[j];
S1[i]=' 0';
}

/ *Izdrukājiet S1, sasaistīto rezultātu */
printf (' nSaliktā virkne ir %s n n',S1);
atgriezties 0;
}

Programmas un izvades momentuzņēmumi:

Teksta apraksts tiek ģenerēts automātiski

Teksta apraksts tiek ģenerēts automātiski

Vēl viens veids, kā bez bibliotēkas funkcijas

Apvienošana, izmantojot rekursiju:

Funkcija stringconcatenate () tiks izmantota, lai iegūtu virknes1 garumu. Ja S2 ir tukšs, tad S2 tiks piešķirta nulles rakstzīme.

Ja S2 nav piešķirta nulles rakstzīme, tad S1 beigās pievienojiet S2 elementu, kas ir S1 [i+j] = S2 [j], tas palielina i vērtību virknē.

Funkcija tiks saukta pati, nododot reformētās virknes (S1, S2) kā argumentu. Tas tiks izsaukts atkal un atkal, līdz S2 būs tukšs.

Saliktais S1 tiks drukāts ar main () kā

#iekļaut

#iekļaut

#definēt BUF_SIZE 256

/ * rekursīva funkcija, lai ieviestu virkņu savienošanu atbilstoši iepriekš aprakstītajam */
spēkā neesošsstringconcatenate(char *S1,char *S2)
{
statisks inti=0;
statisks intj;
j= strlen (S1);
ja(!S2[i])
{
S2[i]=' 0';
}
citādi
{
S1[j] =S2[i];
S1[j+1] = ' 0';
i++;
stringconcatenate(S1,S2);
}
}
intgalvenais()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Ievadiet pirmās virknes vērtību:'); / * lietotāja ziņojums, lai ievadītu pirmo virkni */
fgets (S1,BUF_SIZE,stdin); / * lietotāja ievadītā pirmā virkne, uzglabāt S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('Ievadiet otrās virknes vērtību:'); / * lietotāja ziņojums, lai ievadītu otro virkni */
fgets (S2,BUF_SIZE,stdin); / * lietotāja ievadītā pirmā virkne, uzglabāt S2 */
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Izsauciet funkciju ar parametriem S1, S2 */

printf ('virkņu kombinācija ='%s ' n',S1);
atgriezties 0;
}

Programmas un izvades momentuzņēmumi:

Teksta apraksts tiek ģenerēts automātiski

Teksta apraksts tiek ģenerēts automātiski

Salikšana, izmantojot funkcijas

Funkciju strconcatenate () izsauc galvenais (), lai apvienotu divas virknes.

Funkcija iegūst virknes1 garumu, izmantojot stringlen (string1).

Pievienojiet virknes2 [i] elementiem virknē1 [i+j]. Šī darbība tiks atkārtota, līdz virkne būs tukša. Šeit mēs pievienojam virkni 2 virknei 1 virknes 1 beigās.

Saliktā virkne (virkne 1) tiks saņemta līdz beigām, kad tiks izpildītas visas cilpas iterācijas.

Galvenais () izdrukā saaugto virkni S1

#iekļaut

#iekļaut

#definēt BUF_SIZE 256

/ * funkcija, lai ieviestu virkņu savienošanu atbilstoši iepriekš aprakstītajam */
spēkā neesošsstrconcatenate(char *virkne1, char*virkne2)
{
inti;
intj= strlen (virkne1);
priekš(i=0;virkne2[i];i++)
{
virkne1[i+j]=virkne2[i];
}
virkne1[i+j]= ' 0';
}
intgalvenais()
{
charvirkne1[BUF_SIZE],virkne2[BUF_SIZE];
printf ('Ievadiet pirmo virkni:'); / * Lietotāja ziņojums pirmajai virknei */
fgets (virkne1,BUF_SIZE,stdin); / * Lietotāja ievadītā otrā virkne, saglabāta virknē1 */
virkne1[ strlen (virkne1)-1] = ' 0';

printf ('Ievadiet otro virkni:'); / * Lietotāja ziņojums 2. virknei */
fgets (virkne2,BUF_SIZE,stdin); / * Lietotāja ievadītā otrā virkne, saglabāta virknē2 */
virkne2[ strlen (virkne2)-1] = ' 0';

strconcatenate(virkne1,virkne2); /* Izsauciet funkciju ar virkni1 un virkni2 kā argumentus*/

printf ('Rezultāta virkne = %s' n',virkne1);
atgriezties 0;
}

Programmas un izvades momentuzņēmumi:

Teksta apraksts tiek ģenerēts automātiski

Teksta apraksts tiek ģenerēts automātiski

Stīgu sasaistīšana, izmantojot memcpy

Izmantojot funkciju memcpy (), virknes savienošana tiek veikta, kopējot vārdu pa vārdam no viena virknes bufera uz cita virknes bufera beigām, kur vārda lielums ir 4 baiti, ņemot vērā, ka mēs strādājam ar 32 bitu mašīnu, bet, kad mēs veicam virkņu savienošanu ar izmantojot virkņu salikšanu, izmantojot funkciju strcat (), salikšana tiek veikta, kopējot baitus pa baitiem no viena virkņu bufera uz citu virkņu buferi.

Šī pieeja ir efektīva.

Lietojot memcpy, vienīgais apsvērums ir rūpēties par “ 0”.

C programma, lai sasniegtu strcat ar memcpy:

#iekļaut

#iekļaut

#definēt BUF_SIZE 256

Anulēt strcat_memcpy(char *S1, char *S2)
{
intgarums1,garums2;
garums1= strlen (S1);
garums2= strlen (S2);
memcpy (S1+garums1,S2,garums2);
}
intgalvenais()
{

charvirkne1[BUF_SIZE],virkne2[BUF_SIZE];
printf ('Ievadiet pirmo virkni:'); / * Lietotāja ziņojums pirmajai virknei */
fgets (virkne1,BUF_SIZE,stdin); / * Lietotāja ievadītā otrā virkne, saglabāta virknē1 */
virkne1[ strlen (virkne1)-1] = ' 0';

printf ('Ievadiet otro virkni:'); / * Lietotāja ziņojums 2. virknei */
fgets (virkne2,BUF_SIZE,stdin); / * Lietotāja ievadītā otrā virkne, saglabāta virknē2 */
virkne2[ strlen (virkne2)-1] = ' 0';

strcat_memcpy(virkne1,virkne2); /* Izsauciet funkciju ar virkni1 un virkni2 kā argumentus*/

printf ('Rezultāta virkne = %s' n',virkne1);
atgriezties 0;


}

Programmas un izvades momentuzņēmumi:

Teksta apraksts tiek ģenerēts automātiski

Teksta apraksts tiek ģenerēts automātiski

Secinājums:

Ar visu šo diskusiju mēs varam secināt virkņu savienošanu C. Atgādināsim galvenos elementus: Ir divi veidi, viens ar C standartu un otrs ir lietotāja definēts veids. Lietotāja definētais var būt arī dažāda veida, atkarībā no tā, kā lietotājs vēlas ieviest virkņu saķeri.