Š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:
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:
Ď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:
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:
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:
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.