C Reťazenie reťazcov

C String Concatenation



Reťazenie je proces, ktorým sa druhý reťazec pripojí na koniec prvého reťazca. V tomto článku budeme diskutovať o tom, ako zreťaziť reťazce v C pomocou rôznych metód.

Štandardná funkcia knižnice C, ktorá sa používa na zreťazenie reťazca, je strcat ().







Prototyp funkcie:

$char * strcat (str1,str2);

kde str1 je prvý reťazec a str2 je druhý reťazec. Návratová hodnota funkcie je ukazovateľ na zreťazený reťazec.



Teraz pomocou príkladu uvidíme, ako sa vykonáva zreťazenie.



Príklad 1:

$ strcat (str1,str2);
kde str1 je Bella
str2 je Whitmann

po zreťazení reťazca,prvý reťazec bude

str1 Bella Whitmann
str2 Whitmann

zatiaľ čo reťazec2 zostane rovnaký.





Príklad 2:

$ strcat (str2,str1);
kde str1 je Bella
str2 je Whitmann

po zreťazení reťazca,zreťazený reťazec bude

str1 Bella
str2 Bella Whitmann

pričom reťazec1 zostane rovnaký.

Vyhlásenie v súbore hlavičky C.

Funkcie spracovania reťazcov sú deklarované v hlavičkovom súbore. Ak chce niekto použiť štandardnú funkciu na zreťazenie, musí obsahovať tento hlavičkový súbor.



Reťazenie reťazcov teda môžeme dosiahnuť dvoma spôsobmi. Jeden je s použitím funkcie štandardnej knižnice C a druhý je bez použitia funkcie knižnice C. Nasledujú príklady programov na demonštráciu oboch spôsobov. Reťazenie reťazcov bez použitia funkcie knižnice C je možné implementovať niekoľkými spôsobmi.

Aj o tom budeme diskutovať v nasledujúcich častiach s príkladom.

Reťazenie dvoch reťazcov pomocou funkcie knižnice C.

#zahrnúť

#zahrnúť

#define BUF_SIZE 256
intHlavná()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Dve reťazcové vyrovnávacie pamäte */

printf ('Zadajte prvý reťazec n'); ] /* Vytlačte správu do konzoly, aby používateľ zadal 1. reťazec*/
fgets (S1,BUF_SIZE,stdin); / * uložte vstupný reťazec používateľa do vyrovnávacej pamäte S1 */
S1[ strlen (S1)-1] = ' 0';

printf („Zadajte druhý reťazec n');/* Vytlačiť správu používateľovi na zadanie 2. reťazca*/
fgets (S2,BUF_SIZE,stdin); / * uložiť vstupný reťazec používateľa do vyrovnávacej pamäte S2 */
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); / *Zavolajte štandardnú funkciu pomocou reťazcov S1 a S2 */

printf (' nReťazený reťazec je %s n n',S1); / *Výstup: S1 sa pripojí k S2 */

vrátiť sa 0;
}

Snímky programu a výstupu:

Textový popis sa vygeneruje automaticky

Textový popis je automaticky generovaný so strednou spoľahlivosťou

Reťazenie dvoch reťazcov bez použitia funkcie knižnice

Pomocou slučky for skopírujete druhý reťazec na konci prvého reťazca.

#zahrnúť

#zahrnúť

#define BUF_SIZE 256
intHlavná()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* Deklarujte nárazníky S1, S2 pre reťazec*/
intdĺžka= 0,i,j; /*Premenné potrebné na prechod v slučke*/

printf („Zadajte prvý reťazec“); / * Vytlačte používateľskú správu a zadajte prvý reťazec */
fgets (S1,BUF_SIZE,stdin); /* vstupný reťazec používateľa bude uložený v S1*/
S1[ strlen (S1)-1] = ' 0';

printf („Zadajte druhý reťazec“); / * Vytlačte používateľskú správu a zadajte druhý reťazec */
fgets (S2,BUF_SIZE,stdin); /* vstupný reťazec používateľa bude uložený v S2*/
S2[ strlen (S2)-1] = ' 0';
/* Prejdite prvým reťazcom a nájdite dĺžku S1*/
pre(i=0;S1[i]! =' 0';i++)
{
dĺžka=dĺžka+1;
}

/*dĺžka bude mať koniec S1, začne od dĺžky a skopíruje celú S2 do S1*/
pre(i=dĺžka,j=0;S2[j]! =' 0';i++,j++)
{
S1[i]=S2[j];
S1[i]=' 0';
}

/ *Vytlačte S1, zreťazený výsledok */
printf (' nReťazený reťazec je %s n n',S1);
vrátiť sa 0;
}

Snímky programu a výstupu:

Textový popis sa vygeneruje automaticky

Textový popis sa vygeneruje automaticky

Ďalší spôsob bez funkcie knižnice

Reťazenie pomocou rekurzie:

Na získanie dĺžky reťazca1 sa použije funkcia stringconcatenate (). Ak je S2 prázdny, bude S2 priradený nulový znak.

Ak k S2 nie je priradený nulový znak, ako pridanie prvku S2 na koniec S1, ktorý je S1 [i+j] = S2 [j], zvýši sa hodnota i v reťazci.

Funkcia sa bude volať sama tým, že ako argument odovzdá reformované reťazce (S1, S2). Bude sa volať znova a znova, kým nebude S2 prázdny.

Zreťazený S1 bude vytlačený main () ako

#zahrnúť

#zahrnúť

#define BUF_SIZE 256

/ * rekurzívna funkcia na implementáciu zreťazenia reťazcov podľa vyššie uvedeného popisu */
prázdnystringconcatenate(char *S1,char *S2)
{
statický inti=0;
statický intj;
j= strlen (S1);
keby(!S2[i])
{
S2[i]=' 0';
}
inak
{
S1[j] =S2[i];
S1[j+1] = ' 0';
i++;
stringconcatenate(S1,S2);
}
}
intHlavná()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf („Zadajte hodnotu prvého reťazca:“); / * užívateľská správa na zadanie 1. reťazca */
fgets (S1,BUF_SIZE,stdin); / * užívateľ zadá prvý reťazec, uloží do S1 */
S1[ strlen (S1)-1] = ' 0';

printf („Zadajte hodnotu druhého reťazca:“); / * užívateľská správa na zadanie 2. reťazca */
fgets (S2,BUF_SIZE,stdin); / * užívateľ zadá prvý reťazec, uloží do S2 */
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Zavolajte funkciu s parametrami S1, S2 */

printf ('kombinácia reťazcov ='%s ' n',S1);
vrátiť sa 0;
}

Snímky programu a výstupu:

Textový popis sa vygeneruje automaticky

Textový popis sa vygeneruje automaticky

Reťazenie pomocou funkcií

Funkciu strconcatenate () nazýva main () na kombináciu dvoch reťazcov.

Funkcia získa dĺžku reťazca1 pomocou reťazca stringlen (reťazec1).

Pripojte prvky reťazca2 [i] k reťazcu1 [i+j]. Tento krok sa bude opakovať, kým nebude reťazec prázdny. Tu na konci reťazca1 pripojíme reťazec2 k reťazcu1.

Reťazený reťazec (reťazec 1) bude prijatý do konca, keď budú vykonané všetky iterácie cyklu for.

Main () vytlačí zreťazený reťazec S1

#zahrnúť

#zahrnúť

#define BUF_SIZE 256

/ * funkcia na implementáciu zreťazenia reťazcov podľa vyššie uvedeného popisu */
prázdnystrconcatenate(char *reťazec 1, char*reťazec2)
{
inti;
intj= strlen (reťazec 1);
pre(i=0;reťazec2[i];i++)
{
reťazec 1[i+j]=reťazec2[i];
}
reťazec 1[i+j]= ' 0';
}
intHlavná()
{
charreťazec 1[BUF_SIZE],reťazec2[BUF_SIZE];
printf ('Zadajte prvý reťazec:'); / * Správa užívateľa pre 1. reťazec */
fgets (reťazec 1,BUF_SIZE,stdin); / * Užívateľ zadá druhý reťazec, uložený do reťazca1 */
reťazec 1[ strlen (reťazec 1)-1] = ' 0';

printf ('Zadajte druhý reťazec:'); / * Správa užívateľa pre 2. reťazec */
fgets (reťazec2,BUF_SIZE,stdin); / * Užívateľ zadá druhý reťazec, uložený do reťazca2 */
reťazec2[ strlen (reťazec2)-1] = ' 0';

strconcatenate(reťazec 1,reťazec2); /* Zavolajte funkciu s argumentmi string1 a string2*/

printf ('Výsledný reťazec = %s' n',reťazec 1);
vrátiť sa 0;
}

Snímky programu a výstupu:

Textový popis sa vygeneruje automaticky

Textový popis sa vygeneruje automaticky

Reťazenie reťazcov pomocou memcpy

Použitím funkcie memcpy () sa zreťazenie reťazca vykonáva skopírovaním slova po slove z jednej vyrovnávacej pamäte reťazcov na koniec inej vyrovnávacej pamäte reťazcov, kde veľkosť slova je 4 bajty vzhľadom na to, že bežíme na 32 bitovom počítači, pričom keď vykonávame reťazenie reťazcov pomocou pomocou zreťazenia reťazcov pomocou funkcie strcat () sa zreťazenie vykoná skopírovaním bajtov po bajte z jednej vyrovnávacej pamäte reťazcov do inej vyrovnávacej pamäte reťazcov.

Tento prístup je efektívny z hľadiska výkonu.

Jedinou úvahou pri používaní memcpy je starať sa o ' 0'.

Program C na dosiahnutie strcat s memcpy:

#zahrnúť

#zahrnúť

#define BUF_SIZE 256

Neplatné strcat_memcpy(char *S1, char *S2)
{
intdĺžka 1,dĺžka 2;
dĺžka 1= strlen (S1);
dĺžka 2= strlen (S2);
memcpy (S1+dĺžka 1,S2,dĺžka 2);
}
intHlavná()
{

charreťazec 1[BUF_SIZE],reťazec2[BUF_SIZE];
printf ('Zadajte prvý reťazec:'); / * Správa užívateľa pre 1. reťazec */
fgets (reťazec 1,BUF_SIZE,stdin); / * Užívateľ zadá druhý reťazec, uložený do reťazca1 */
reťazec 1[ strlen (reťazec 1)-1] = ' 0';

printf ('Zadajte druhý reťazec:'); / * Správa užívateľa pre 2. reťazec */
fgets (reťazec2,BUF_SIZE,stdin); / * Užívateľ zadá druhý reťazec, uložený do reťazca2 */
reťazec2[ strlen (reťazec2)-1] = ' 0';

strcat_memcpy(reťazec 1,reťazec2); /* Zavolajte funkciu s argumentmi string1 a string2*/

printf ('Výsledný reťazec = %s' n',reťazec 1);
vrátiť sa 0;


}

Snímky programu a výstupu:

Textový popis sa vygeneruje automaticky

Textový popis sa vygeneruje automaticky

Záver:

Celou touto diskusiou môžeme uzavrieť reťazenie reťazcov v C. Videli sme mnoho príkladov a ukážkových programov na reťazenie reťazcov. Pripomenieme hlavné položky: Existujú dva spôsoby, jeden so štandardom C a druhý spôsobom definovaným používateľom. Užívateľom definovaný môže byť ďalej mnoho typov, závisí od toho, ako chce užívateľ implementovať zreťazenie reťazcov.