C Zřetězení řetězců

C String Concatenation

Zřetězení je proces, kterým se připojí druhý řetězec na konec prvního řetězce. V tomto článku budeme diskutovat o tom, jak zřetězit řetězce v C pomocí různých metod.

Standardní funkcí knihovny C, která se používá ke zřetězení řetězce, je strcat ().



Prototyp funkce:

$char * strcat (str1,str2);

kde str1 je první řetězec a str2 je druhý řetězec. Návratová hodnota funkce je ukazatel na zřetězený řetězec.



Nyní pomocí příkladu uvidíme, jak se provádí zřetězení.



Příklad 1:

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

po zřetězení řetězce,první řetězec bude

str1 Bella Whitmann
str2 Whitmann

zatímco řetězec2 zůstane stejný.

Příklad 2:

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

po zřetězení řetězce,zřetězený řetězec bude

str1 Bella
str2 Bella Whitmann

zatímco řetězec1 zůstane stejný.

Prohlášení v souboru záhlaví C.

Funkce zpracování řetězců jsou deklarovány v záhlaví. Pokud chce někdo použít standardní funkci ke zřetězení, musí být zahrnut tento záhlaví.



Zřetězení řetězců tedy můžeme dosáhnout dvěma způsoby. Jeden je s použitím funkce standardní knihovny C a druhý je bez použití funkce knihovny C. Následují ukázkové programy, které ukazují oba způsoby. Zřetězení řetězců bez použití funkce knihovny C lze implementovat několika způsoby.

Také o tom budeme diskutovat v následujících částech s příkladem.

Zřetězení dvou řetězců pomocí funkce C knihovny

#zahrnout

#zahrnout

#define BUF_SIZE 256
inthlavní()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Dvě řetězcové vyrovnávací paměti */

printf (`` Zadejte první řetězec n'); ] /* Vytisknout zprávu do konzoly, aby uživatel zadal 1. řetězec*/
fgets (S1,BUF_SIZE,stdin); / * uložit uživatelský vstupní řetězec do vyrovnávací paměti S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('Zadejte druhý řetězec.' n');/* Vytisknout zprávu uživateli pro vložení 2. řetězce*/
fgets (S2,BUF_SIZE,stdin); / * uložit vstupní řetězec uživatele do vyrovnávací paměti S2 */
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); / *Volání standardní funkce pomocí řetězců S1 a S2 */

printf (' nZřetězený řetězec je %s n n',S1); / *Výstup: S1 se připojí k S2 */

vrátit se 0;
}

Snímky programu a výstupu:

Textový popis je generován automaticky

Textový popis je automaticky generován se střední jistotou

Zřetězení dvou řetězců bez použití funkce knihovny

Pomocí smyčky for zkopírujete druhý řetězec na konec prvního řetězce.

#zahrnout

#zahrnout

#define BUF_SIZE 256
inthlavní()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* Deklarujte nárazníky S1, S2 pro oba řetězce*/
intdélka= 0,,j; /*Proměnné potřebné pro procházení smyčky*/

printf ('Zadejte první řetězec'); / * Vytiskněte zprávu uživatele a zadejte první řetězec */
fgets (S1,BUF_SIZE,stdin); /* uživatelský vstupní řetězec bude uložen v S1*/
S1[ strlen (S1)-1] = ' 0';

printf („Zadejte druhý řetězec“); / * Vytiskněte zprávu uživatele a zadejte druhý řetězec */
fgets (S2,BUF_SIZE,stdin); /* uživatelský vstupní řetězec bude uložen v S2*/
S2[ strlen (S2)-1] = ' 0';
/* Procházením prvního řetězce najděte délku S1*/
pro(=0;S1[]! =' 0';++)
{
délka=délka+1;
}

/*délka bude mít konec S1, začne od délky a zkopíruje celý S2 do S1*/
pro(=délka,j=0;S2[j]! =' 0';++,j++)
{
S1[]=S2[j];
S1[]=' 0';
}

/ *Vytiskněte S1, zřetězený výsledek */
printf (' nZřetězený řetězec je %s n n',S1);
vrátit se 0;
}

Snímky programu a výstupu:

Textový popis je generován automaticky

Textový popis je generován automaticky

Další způsob bez funkce knihovny

Zřetězení pomocí rekurze:

K získání délky řetězce1 bude použita funkce stringconcatenate (). Pokud je S2 prázdný, pak bude S2 přiřazen nulový znak.

Pokud není S2 přiřazen nulový znak, než přidat prvek S2 na konec S1, který je S1 [i+j] = S2 [j], zvýší se hodnota i v řetězci.

Funkce bude volána sama předáním reformovaných řetězců (S1, S2) jako argumentu. Bude se volat znovu a znovu, dokud nebude S2 prázdný.

Zřetězený S1 bude vytištěn main () jako

#zahrnout

#zahrnout

#define BUF_SIZE 256

/ * rekurzivní funkce k implementaci zřetězení řetězců podle výše uvedeného popisu */
prázdnéstringconcatenate(char *S1,char *S2)
{
statický int=0;
statický intj;
j= strlen (S1);
-li(!S2[])
{
S2[]=' 0';
}
jiný
{
S1[j] =S2[];
S1[j+1] = ' 0';
++;
stringconcatenate(S1,S2);
}
}
inthlavní()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Zadejte hodnotu prvního řetězce:'); / * uživatelská zpráva pro zadání 1. řetězce */
fgets (S1,BUF_SIZE,stdin); / * uživatel zadá první řetězec, uloží do S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('Zadejte hodnotu druhého řetězce:'); / * uživatelská zpráva pro vložení 2. řetězce */
fgets (S2,BUF_SIZE,stdin); / * uživatel zadá první řetězec, uloží do S2 */
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); / * Zavolejte funkci s parametry S1, S2 jako parametry */

printf ('kombinace řetězců ='%s ' n',S1);
vrátit se 0;
}

Snímky programu a výstupu:

Textový popis je generován automaticky

Textový popis je generován automaticky

Zřetězení pomocí funkcí

Funkce strconcatenate () je volána main () ke spojení dvou řetězců.

Funkce získá délku řetězce1 pomocí stringlen (řetězec1).

Spojte prvky řetězce2 [i] v řetězci1 [i+j]. Tento krok se bude opakovat, dokud nebude řetězec prázdný. Zde připojíme řetězec2 na řetězec1 na konci řetězce1.

Zřetězený řetězec (řetězec 1) bude přijat do konce, kdy budou provedeny všechny iterace smyčky for.

Main () vytiskne zřetězený řetězec S1

#zahrnout

#zahrnout

#define BUF_SIZE 256

/ * funkce pro implementaci zřetězení řetězců podle výše uvedeného popisu */
prázdnéstrconcatenate(char *řetězec 1, char*řetězec2)
{
int;
intj= strlen (řetězec 1);
pro(=0;tětiva2[];++)
{
řetězec 1[+j]=řetězec2[];
}
řetězec 1[+j]= ' 0';
}
inthlavní()
{
charřetězec 1[BUF_SIZE],řetězec2[BUF_SIZE];
printf ('Zadejte první řetězec:'); / * Uživatelská zpráva pro 1. řetězec */
fgets (řetězec 1,BUF_SIZE,stdin); / * Uživatel zadá druhý řetězec uložený do řetězce1 */
řetězec 1[ strlen (řetězec 1)-1] = ' 0';

printf ('Zadejte druhý řetězec:'); / * Uživatelská zpráva pro 2. řetězec */
fgets (řetězec2,BUF_SIZE,stdin); / * Uživatel zadá druhý řetězec uložený do řetězce2 */
řetězec2[ strlen (řetězec2)-1] = ' 0';

strconcatenate(řetězec 1,řetězec2); /* Zavolejte funkci s argumenty řetězec1 a řetězec2*/

printf ('Výsledný řetězec = %s' n',řetězec 1);
vrátit se 0;
}

Snímky programu a výstupu:

Textový popis je generován automaticky

Textový popis je generován automaticky

Zřetězení řetězců pomocí memcpy

Pomocí funkce memcpy () je zřetězení řetězce provedeno zkopírováním slova po slově z jedné vyrovnávací paměti řetězců na konec jiné vyrovnávací paměti řetězců, kde velikost slova je 4 bajty vzhledem k tomu, že běžíme na 32bitovém počítači, zatímco když provádíme zřetězení řetězců pomocí zřetězení řetězců pomocí funkce strcat () se zřetězení provádí zkopírováním bajtu po bajtu z jedné vyrovnávací paměti řetězců do jiné vyrovnávací paměti řetězců.

Tento přístup je efektivní z hlediska výkonu.

Jediným hlediskem při používání memcpy je starat se o ' 0'.

Program C k dosažení strcat s memcpy:

#zahrnout

#zahrnout

#define BUF_SIZE 256

Zrušeno strcat_memcpy(char *S1, char *S2)
{
intdélka 1,délka 2;
délka 1= strlen (S1);
délka 2= strlen (S2);
memcpy (S1+délka 1,S2,délka 2);
}
inthlavní()
{

charřetězec 1[BUF_SIZE],řetězec2[BUF_SIZE];
printf ('Zadejte první řetězec:'); / * Uživatelská zpráva pro 1. řetězec */
fgets (řetězec 1,BUF_SIZE,stdin); / * Uživatel zadá druhý řetězec uložený do řetězce1 */
řetězec 1[ strlen (řetězec 1)-1] = ' 0';

printf ('Zadejte druhý řetězec:'); / * Uživatelská zpráva pro 2. řetězec */
fgets (řetězec2,BUF_SIZE,stdin); / * Uživatel zadá druhý řetězec uložený do řetězce2 */
řetězec2[ strlen (řetězec2)-1] = ' 0';

strcat_memcpy(řetězec 1,řetězec2); /* Zavolejte funkci s argumenty řetězec1 a řetězec2*/

printf ('Výsledný řetězec = %s' n',řetězec 1);
vrátit se 0;


}

Snímky programu a výstupu:

Textový popis je generován automaticky

Textový popis je generován automaticky

Závěr:

S celou touto diskusí můžeme uzavřít zřetězení řetězců v C. Viděli jsme mnoho příkladů a ukázkových programů pro zřetězení řetězců. Připomeneme si hlavní položky: Existují dva způsoby, jeden se standardem C a druhý způsobem definovaným uživatelem. Uživatelsky definovaný může být dále mnoha typů, záleží na tom, jak chce uživatel implementovat zřetězení řetězců.