Vakio C -kirjastotoiminto, jota käytetään merkkijonon ketjuttamiseen, on strcat ().
Toiminnon prototyyppi:
$hiiltyä * strcat (str1,str2);jossa str1 on ensimmäinen merkkijono ja str2 on toinen merkkijono. Funktion palautusarvo on osoitin yhdistetylle merkkijonolle.
Nyt esimerkin avulla näemme kuinka ketjutus suoritetaan.
Esimerkki 1:
$ strcat (str1,str2);missä str1 on Bella
str2 on Whitmann
merkkijonon yhdistämisen jälkeen,ensimmäinen merkkijono tulee olemaan
str1 Bella Whitmann
str2 Whitmann
merkkijono2 pysyy samana.
Esimerkki2:
$ strcat (str2,str1);missä str1 on Bella
str2 on Whitmann
merkkijonon yhdistämisen jälkeen,ketjutettu merkkijono on
str1 Bella
str2 Bella Whitmann
merkkijono1 pysyy samana.
Ilmoitus C -otsikkotiedostossa
Merkkijonon käsittelytoiminnot on ilmoitettu otsikkotiedoston alla. Jos haluat käyttää ketjutuksen vakiotoimintoa, tämä otsikkotiedosto on sisällytettävä.
Näin ollen voimme saavuttaa merkkijonon yhdistämisen kahdella tavalla. Yksi on Standard C -kirjastotoiminnon käyttäminen ja toinen ilman C -kirjasto -toimintoa. Seuraavassa on esimerkkiohjelmia, jotka osoittavat molemmat tavat. Merkkijonon yhdistäminen ilman C -kirjasto -toimintoa voidaan toteuttaa monella tavalla.
Keskustelemme siitä myös seuraavissa osissa esimerkin avulla.
Kahden merkkijonon ketjutus käyttämällä C -kirjastotoimintoa
#sisältää#sisältää
#define BUF_SIZE 256
inttärkein()
{
hiiltyäS1[BUF_SIZE],S2[BUF_SIZE]; / * Kaksi merkkijonopuskuria */
printf ('Kirjoita ensimmäinen merkkijono n''); ] /* Tulosta viesti konsoliin, jotta käyttäjä voi syöttää ensimmäisen merkkijonon*/
fgets (S1,BUF_SIZE,stdin); / * tallenna käyttäjän syöttöjono S1 -puskuriin */
S1[ strlen (S1)-1] = '' 0'';
printf ('Kirjoita toinen merkkijono n'');/* Tulosta viesti käyttäjälle syöttääksesi toisen merkkijonon*/
fgets (S2,BUF_SIZE,stdin); / * tallenna käyttäjän syöttöjono S2 -puskuriin */
S2[ strlen (S2)-1] = '' 0'';
strcat (S1,S2); / *Kutsu vakiotoiminto S1- ja S2 -merkkijonoilla */
printf ('' nKetjutettu merkkijono on %s n n'',S1); / *Lähtö: S1 liitetään S2: een */
palata 0;
}
Tilannekuvia ohjelmasta ja tuotoksesta:
Kahden merkkijonon ketjutus ilman kirjasto -toimintoa
Silmukan avulla voit kopioida toisen merkkijonon ensimmäisen merkkijonon lopussa.
#sisältää#sisältää
#define BUF_SIZE 256
inttärkein()
{
hiiltyäS1[BUF_SIZE],S2[BUF_SIZE]; /* Ilmoita puskurit S1, S2 molemmille merkkijonoille*/
intpituus= 0,i,j; /*Silmukan kulkemiseen tarvittavat muuttujat*/
printf ('Kirjoita ensimmäinen merkkijono'); / * Tulosta käyttäjän viesti syöttääksesi ensimmäisen merkkijonon */
fgets (S1,BUF_SIZE,stdin); /* käyttäjän syöttöjono tallennetaan S1: een*/
S1[ strlen (S1)-1] = '' 0'';
printf ('Kirjoita toinen merkkijono'); / * Tulosta käyttäjän viesti syöttääksesi toisen merkkijonon */
fgets (S2,BUF_SIZE,stdin); /* käyttäjän syöttöjono tallennetaan S2: een*/
S2[ strlen (S2)-1] = '' 0'';
/* Kierrä ensimmäinen merkkijono löytääksesi pituuden S1*/
varten(i=0;S1[i]! ='' 0'';i++)
{
pituus=pituus+1;
}
/*pituudella on S1: n loppu, aloita pituudesta ja kopioi koko S2 S1: een*/
varten(i=pituus,j=0;S2[j]! ='' 0'';i++,j++)
{
S1[i]=S2[j];
S1[i]='' 0'';
}
/ *Tulosta S1, yhdistetty tulos */
printf ('' nKetjutettu merkkijono on %s n n'',S1);
palata 0;
}
Tilannekuvia ohjelmasta ja tuotoksesta:
Toinen tapa ilman kirjastotoimintoa
Ketjutus käyttäen rekursiota:
Funktiota stringconcatenate () käytetään merkkijonon 1 pituuden saamiseen. Jos S2 on tyhjä, S2: lle annetaan nollamerkki.
Jos S2: lle ei ole määritetty nollamerkkiä, lisää S2: n elementti S1: n loppuun eli S1 [i+j] = S2 [j], tämä lisää i: n arvoa merkkijonossa.
Funktiota kutsutaan itseksi ohittamalla reformoidut merkkijonot (S1, S2) argumenttina. Sitä kutsutaan uudestaan ja uudestaan, kunnes S2 on tyhjä.
Ketjutettu S1 tulostetaan main () nimellä
#sisältää#sisältää
#define BUF_SIZE 256
/ * rekursiivinen funktio merkkijonon yhdistämisen toteuttamiseksi yllä olevan kuvauksen mukaisesti */
mitätönstringconcatenate(hiiltyä *S1,hiiltyä *S2)
{
staattinen inti=0;
staattinen intj;
j= strlen (S1);
jos(!S2[i])
{
S2[i]='' 0'';
}
muu
{
S1[j] =S2[i];
S1[j+1] = '' 0'';
i++;
stringconcatenate(S1,S2);
}
}
inttärkein()
{
hiiltyäS1[BUF_SIZE],S2[BUF_SIZE];
printf ('Anna ensimmäisen merkkijonon arvo:'); / * käyttäjän viesti syötettäväksi 1. merkkijono */
fgets (S1,BUF_SIZE,stdin); / * käyttäjän syöttö ensimmäinen merkkijono, tallenna S1: een */
S1[ strlen (S1)-1] = '' 0'';
printf ('Anna toisen merkkijonon arvo:'); / * käyttäjän viesti syötettäväksi 2. merkkijono */
fgets (S2,BUF_SIZE,stdin); / * käyttäjän syöttämä ensimmäinen merkkijono, tallenna S2: een */
S2[ strlen (S2)-1] = '' 0'';
stringconcatenate(S1,S2); / * Soita toimintoon parametreilla S1, S2 */
printf ('merkkijonojen yhdistelmä ='%s ' n'',S1);
palata 0;
}
Tilannekuvia ohjelmasta ja tuotoksesta:
Ketjutus toimintojen avulla
Funktiota strconcatenate () kutsuu main () yhdistämään kaksi merkkijonoa.
Funktio saa merkkijonon1 pituuden käyttämällä merkkijonoa (merkkijono1).
Liitä merkkijonon 2 [i] elementit merkkijono1 [i+j]. Tämä vaihe toistetaan, kunnes merkkijono on tyhjä. Tässä yhteydessä merkkijono2 on merkkijono1 merkkijonon 1 lopussa.
Ketjutettu merkkijono (merkkijono 1) vastaanotetaan loppuun, kun kaikki silmukan iteraatiot suoritetaan.
Pää () tulostaa ketjutetun merkkijonon S1
#sisältää#sisältää
#define BUF_SIZE 256
/ * -toiminto merkkijonon yhdistämisen toteuttamiseksi yllä olevan kuvauksen mukaisesti */
mitätönstrconcatenate(hiiltyä *merkkijono 1, hiiltyä*merkkijono2)
{
inti;
intj= strlen (merkkijono 1);
varten(i=0;merkkijono2[i];i++)
{
merkkijono 1[i+j]=merkkijono2[i];
}
merkkijono 1[i+j]= '' 0'';
}
inttärkein()
{
hiiltyämerkkijono 1[BUF_SIZE],merkkijono2[BUF_SIZE];
printf ('Kirjoita ensimmäinen merkkijono:'); / * Käyttäjän viesti ensimmäiselle merkkijonolle */
fgets (merkkijono 1,BUF_SIZE,stdin); / * Käyttäjän syöttämä toinen merkkijono, tallennettu merkkijonoon1 */
merkkijono 1[ strlen (merkkijono 1)-1] = '' 0'';
printf ('Kirjoita toinen merkkijono:'); / * Käyttäjän viesti toiselle merkkijonolle */
fgets (merkkijono2,BUF_SIZE,stdin); / * Käyttäjän syöttämä toinen merkkijono, tallennettu merkkijonoon2 */
merkkijono2[ strlen (merkkijono2)-1] = '' 0'';
strconcatenate(merkkijono 1,merkkijono2); /* Kutsu funktio argumentteina merkkijono1 ja merkkijono2*/
printf ('Tuloksena oleva merkkijono = %s' n'',merkkijono 1);
palata 0;
}
Tilannekuvia ohjelmasta ja tuotoksesta:
Merkkijonon ketjutus käyttämällä memcpy -ohjelmaa
Käyttämällä memcpy () -funktiota merkkijonon ketjutus tapahtuu kopioimalla sana sanalta yhdestä merkkipuskurista toisen merkkijonopuskurin loppuun, jossa sanan koko on 4 tavua, kun otetaan huomioon, että käytämme 32 -bittistä konetta, kun taas teemme merkkijonokytkentä käyttämällä merkkijonon yhdistämistä käyttämällä strcat () -funktiota, ketjutus tapahtuu kopioimalla tavu tavu yhdeltä merkkijonopuskurilta toiselle merkkijonopuskurille.
Tämä lähestymistapa on tehokasta.
Ainoa huomio käytettäessä memcpyä on huolehtia ' 0': sta.
C -ohjelma strcatin saavuttamiseksi muistilla:
#sisältää#sisältää
#define BUF_SIZE 256
Mitätöi strcat_memcpy(hiiltyä *S1, hiiltyä *S2)
{
intpituus 1,pituus2;
pituus 1= strlen (S1);
pituus2= strlen (S2);
muisti (S1+pituus 1,S2,pituus2);
}
inttärkein()
{
hiiltyämerkkijono 1[BUF_SIZE],merkkijono2[BUF_SIZE];
printf ('Kirjoita ensimmäinen merkkijono:'); / * Käyttäjän viesti ensimmäiselle merkkijonolle */
fgets (merkkijono 1,BUF_SIZE,stdin); / * Käyttäjän syöttämä toinen merkkijono, tallennettu merkkijonoon1 */
merkkijono 1[ strlen (merkkijono 1)-1] = '' 0'';
printf ('Kirjoita toinen merkkijono:'); / * Käyttäjän viesti toiselle merkkijonolle */
fgets (merkkijono2,BUF_SIZE,stdin); / * Käyttäjän syöttämä toinen merkkijono, tallennettu merkkijonoon2 */
merkkijono2[ strlen (merkkijono2)-1] = '' 0'';
strcat_memcpy(merkkijono 1,merkkijono2); /* Kutsu funktio argumentteina merkkijono1 ja merkkijono2*/
printf ('Tuloksena oleva merkkijono = %s' n'',merkkijono 1);
palata 0;
}
Tilannekuvia ohjelmasta ja tuotoksesta:
Johtopäätös:
Kaiken tämän keskustelun avulla voimme päättää merkkijonon yhdistämisen C. Muistamme pääkohdat: On olemassa kaksi tapaa, joista toinen on C -standardi ja toinen on käyttäjän määrittämä tapa. Käyttäjän määrittämiä voi olla monenlaisia, riippuen siitä, miten käyttäjä haluaa toteuttaa merkkijonon yhdistämisen.