C String-aaneenschakeling

C String Concatenation



Concatenatie is het proces om een ​​tweede string toe te voegen aan het einde van de eerste string. In dit artikel gaan we bespreken hoe u strings in C kunt samenvoegen met behulp van verschillende methoden.

De standaard C-bibliotheekfunctie die wordt gebruikt om strings samen te voegen is strcat().







Functie Prototype:

$char * strcat (str1,str2);

waarbij str1 de eerste string is en str2 de tweede string is. De geretourneerde waarde van de functie is de aanwijzer naar de aaneengeschakelde tekenreeks.



Nu zullen we met behulp van voorbeelden zien hoe aaneenschakeling wordt uitgevoerd.



Voorbeeld 1:

$ strcat (str1,str2);
waar str1 is Bella
str2 is Whitmann

na aaneenschakeling van string,eerste string zal zijn

str1 Bella Whitmann
str2 Whitmann

terwijl string2 hetzelfde blijft.





Voorbeeld2:

$ strcat (str2,str1);
waar str1 is Bella
str2 is Whitmann

na aaneenschakeling van string,aaneengeschakelde tekenreeks zal zijn

str1 Bella
str2 Bella Whitmann

terwijl string1 hetzelfde blijft.

Verklaring in C-headerbestand

Functies voor het afhandelen van strings worden gedeclareerd onder headerfile. Als men de standaardfunctie wil gebruiken om samen te voegen, moet dit headerbestand worden opgenomen.



Daarom kunnen we stringconcatenatie op twee manieren bereiken. De ene is met het gebruik van de standaard C-bibliotheekfunctie en de andere is zonder de C-bibliotheekfunctie te gebruiken. Hieronder volgen voorbeeldprogramma's om beide manieren te demonstreren. Stringconcatenatie zonder gebruik te maken van de C-bibliotheekfunctie kan op meerdere manieren worden geïmplementeerd.

We zullen dat ook bespreken in de komende paragrafen met een voorbeeld.

Aaneenschakeling van twee strings met behulp van de C-bibliotheekfunctie

#erbij betrekken

#erbij betrekken

#define BUF_SIZE 256
inthoofd()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* Twee stringbuffers */

printf ('Voer de eerste tekenreeks in'N'); ] /* Druk een bericht af naar de console zodat de gebruiker de eerste string kan invoeren*/
fgets (S1,BUF_SIZE,standaard); /* sla de gebruikersinvoerreeks op in S1-buffer */
S1[ strlen (S1)-1] = ' 0';

printf ('Voer de tweede string in'N');/* Print bericht naar gebruiker om 2e string in te voeren*/
fgets (S2,BUF_SIZE,standaard); /* sla de gebruikersinvoerreeks op in S2-buffer */
S2[ strlen (S2)-1] = ' 0';

strcat (S1,S2); /* Roep de standaardfunctie aan met S1- en S2-strings */

printf ('NAaneengeschakelde tekenreeks is %sNN',S1); /*Uitvoer: S1 wordt toegevoegd met S2 */

opbrengst 0;
}

Snapshots van het programma en de uitvoer:

Tekstbeschrijving automatisch gegenereerd

Tekstbeschrijving automatisch gegenereerd met gemiddeld vertrouwen

Aaneenschakeling van twee strings zonder de bibliotheekfunctie te gebruiken

Gebruik de for-lus om de tweede reeks aan het einde van de eerste reeks te kopiëren.

#erbij betrekken

#erbij betrekken

#define BUF_SIZE 256
inthoofd()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; /* Declareer de buffers S1, S2 voor zowel de string*/
intlengte= 0,l,J; /*Variabelen die nodig zijn voor het doorlopen van een lus*/

printf ('Voer de eerste string in'); /* Druk gebruikersbericht af om de eerste string in te voeren */
fgets (S1,BUF_SIZE,standaard); /* gebruikersinvoerreeks wordt opgeslagen in S1*/
S1[ strlen (S1)-1] = ' 0';

printf ('Voer de tweede string in'); /* Druk gebruikersbericht af om tweede tekenreeks in te voeren */
fgets (S2,BUF_SIZE,standaard); /* gebruikersinvoerreeks wordt opgeslagen in S2*/
S2[ strlen (S2)-1] = ' 0';
/* Doorloop de eerste string om de lengte van S1*/ te vinden
voor(l=0;S1[l]! =' 0';l++)
{
lengte=lengte+1;
}

/*lengte heeft het einde van de S1, begin bij de lengte en kopieer de hele S2 naar S1*/
voor(l=lengte,J=0;S2[J]! =' 0';l++,J++)
{
S1[l]=S2[J];
S1[l]=' 0';
}

/*Druk de S1 af, aaneengeschakeld resultaat */
printf ('NAaneengeschakelde tekenreeks is %sNN',S1);
opbrengst 0;
}

Snapshots van het programma en de uitvoer:

Tekstbeschrijving automatisch gegenereerd

Tekstbeschrijving automatisch gegenereerd

Een andere manier om zonder bibliotheekfunctie te werken

Aaneenschakeling met behulp van recursie:

De functie stringconcatenate() wordt gebruikt om de lengte van string1 te krijgen. Als S2 leeg is, wordt een null-teken toegewezen aan S2.

Als er geen null-teken is toegewezen aan S2, voeg dan een element van S2 toe aan het einde van S1 dat is S1[i+j]=S2[j], dit verhoogt de waarde van i in de string.

Een functie zal zichzelf aanroepen door de hervormde strings (S1,S2) als argument door te geven. Het wordt keer op keer aangeroepen totdat de S2 leeg is.

De aaneengeschakelde S1 wordt afgedrukt door main() als

#erbij betrekken

#erbij betrekken

#define BUF_SIZE 256

/* recursieve functie om tekenreeksaaneenschakeling te implementeren volgens de bovenstaande beschrijving */
leegtestringconcatenate(char *S1,char *S2)
{
statisch intl=0;
statisch intJ;
J= strlen (S1);
indien(!S2[l])
{
S2[l]=' 0';
}
anders
{
S1[J] =S2[l];
S1[J+1] = ' 0';
l++;
stringconcatenate(S1,S2);
}
}
inthoofd()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Voer de waarde van de eerste string in:'); /* gebruikersbericht om 1e tekenreeks in te voeren */
fgets (S1,BUF_SIZE,standaard); /* gebruikersinvoer eerste string, opslaan in S1 */
S1[ strlen (S1)-1] = ' 0';

printf ('Voer de waarde van de tweede string in:'); /* gebruikersbericht om 2e tekenreeks in te voeren */
fgets (S2,BUF_SIZE,standaard); /* gebruikersinvoer eerste string, opslaan in S2 */
S2[ strlen (S2)-1] = ' 0';

stringconcatenate(S1,S2); /* Roep de functie aan met S1,S2 als parameters */

printf ('combinatie van strings ='%s'N',S1);
opbrengst 0;
}

Snapshots van het programma en de uitvoer:

Tekstbeschrijving automatisch gegenereerd

Tekstbeschrijving automatisch gegenereerd

Aaneenschakeling door functies te gebruiken

De functie strconcatenate() wordt aangeroepen door de main() om twee strings te combineren.

De functie krijgt de lengte van string1 door stringlen(string1) te gebruiken.

Sluit de elementen van string2[i] aan in string1[i+j]. Deze stap wordt herhaald totdat de tekenreeks leeg is. Hier voegen we string2 toe aan string1 aan het einde van string1.

Aaneengeschakelde string (string 1) wordt aan het einde ontvangen wanneer alle iteraties van de for-lus worden uitgevoerd.

De main() drukt de aaneengeschakelde string S1 . af

#erbij betrekken

#erbij betrekken

#define BUF_SIZE 256

/* functie om tekenreeksaaneenschakeling te implementeren volgens de bovenstaande beschrijving */
leegtesamenvoegen(char *tekenreeks1, char*string2)
{
intl;
intJ= strlen (tekenreeks1);
voor(l=0;snaar2[l];l++)
{
tekenreeks1[l+J]=string2[l];
}
tekenreeks1[l+J]= ' 0';
}
inthoofd()
{
chartekenreeks1[BUF_SIZE],string2[BUF_SIZE];
printf ('Voer de eerste string in:'); /* Gebruikersbericht voor 1e string */
fgets (tekenreeks1,BUF_SIZE,standaard); /* Gebruikersinvoer tweede string , opgeslagen in string1 */
tekenreeks1[ strlen (tekenreeks1)-1] = ' 0';

printf ('Voer de tweede string in:'); /* Gebruikersbericht voor 2e string */
fgets (string2,BUF_SIZE,standaard); /* Gebruikersinvoer tweede string , opgeslagen in string2 */
string2[ strlen (string2)-1] = ' 0';

samenvoegen(tekenreeks1,string2); /* Roep de functie aan met string1 en string2 als argumenten*/

printf ('Resulterende tekenreeks = %s'N',tekenreeks1);
opbrengst 0;
}

Snapshots van het programma en de uitvoer:

Tekstbeschrijving automatisch gegenereerd

Tekstbeschrijving automatisch gegenereerd

Aaneenschakeling van tekenreeksen met behulp van memcpy

Door de functie memcpy() te gebruiken, wordt de aaneenschakeling van een tekenreeks gedaan door woord voor woord van de ene tekenreeksbuffer naar het einde van een andere tekenreeksbuffer te kopiëren, waarbij de woordgrootte 4 bytes is, aangezien we op een 32-bits machine werken, terwijl we tekenreeksen aaneenschakelen door met behulp van tekenreeksaaneenschakeling door de functie strcat() te gebruiken, wordt aaneenschakeling gedaan door byte voor byte van de ene tekenreeksbuffer naar een andere tekenreeksbuffer te kopiëren.

Deze aanpak is prestatie-efficiënt.

De enige overweging bij het gebruik van memcpy is om voor '' te zorgen.

C-programma om de strcat met memcpy te bereiken:

#erbij betrekken

#erbij betrekken

#define BUF_SIZE 256

Void strcat_memcpy(char *S1, char *S2)
{
intlengte1,lengte2;
lengte1= strlen (S1);
lengte2= strlen (S2);
memcpy (S1+lengte1,S2,lengte2);
}
inthoofd()
{

chartekenreeks1[BUF_SIZE],string2[BUF_SIZE];
printf ('Voer de eerste string in:'); /* Gebruikersbericht voor 1e string */
fgets (tekenreeks1,BUF_SIZE,standaard); /* Gebruikersinvoer tweede string , opgeslagen in string1 */
tekenreeks1[ strlen (tekenreeks1)-1] = ' 0';

printf ('Voer de tweede string in:'); /* Gebruikersbericht voor 2e string */
fgets (string2,BUF_SIZE,standaard); /* Gebruikersinvoer tweede string , opgeslagen in string2 */
string2[ strlen (string2)-1] = ' 0';

strcat_memcpy(tekenreeks1,string2); /* Roep de functie aan met string1 en string2 als argumenten*/

printf ('Resulterende tekenreeks = %s'N',tekenreeks1);
opbrengst 0;


}

Snapshots van het programma en de uitvoer:

Tekstbeschrijving automatisch gegenereerd

Tekstbeschrijving automatisch gegenereerd

Conclusie:

Met al deze discussie kunnen we de stringconcatenatie in C afsluiten. We hebben veel voorbeelden en voorbeeldprogramma's gezien voor stringconcatenatie. We zullen de belangrijkste items onthouden: er zijn twee manieren, een met de C-standaard en een andere is een door de gebruiker gedefinieerde manier. Door de gebruiker gedefinieerd kan verder van vele soorten zijn, hangt af van hoe de gebruiker tekenreeksaaneenschakeling wil implementeren.