Ц Повезивање низова

C String Concatenation



Конкатенација је процес додавања другог низа на крај првог низа. У овом чланку ћемо разговарати о томе како спојити низове у Ц користећи различите методе.

Стандардна функција библиотеке Ц која се користи за спајање низа је стрцат ().







Прототип функције:

$цхар * стрцат (стр1,стр2);

где је стр1 први низ, а стр2 други низ. Повратна вредност функције је показивач на уједињени низ.



Сада ћемо уз помоћ примера видети како се врши спајање.



Пример 1:

$ стрцат (стр1,стр2);
где је стр1 Белла
стр2 је Вхитманн

након спајања низа,први низ ће бити

стр1 Белла Вхитманн
стр2 Вхитманн

док ће низ2 остати исти.





Пример 2:

$ стрцат (стр2,стр1);
где је стр1 Белла
стр2 је Вхитманн

након спајања низа,спојени низ ће бити

стр1 Белла
стр2 Белла Вхитманн

док ће стринг1 остати исти.

Декларација у датотеци заглавља Ц

Функције руковања низовима су декларисане у датотеци заглавља. Ако неко жели да користи стандардну функцију за спајање, ову датотеку заглавља је потребно укључити.



Дакле, повезивање стрингова можемо постићи на два начина. Један је са коришћењем функције стандардне библиотеке Ц, а други је без коришћења функције библиотеке Ц. Следе примери програма који показују оба начина. Повезивање низова без употребе функције библиотеке Ц може се имплементирати на више начина.

О томе ћемо такође расправљати у наредним одељцима са примерима.

Повезивање два низа помоћу функције библиотеке Ц.

#инцлуде

#инцлуде

#дефине БУФ_СИЗЕ 256
интглавни()
{
цхарС1[БУФ_СИЗЕ],С2[БУФ_СИЗЕ]; / * Два међуспремника стринга */

принтф ('Унесите први низ н'); ] /* Одштампајте поруку на конзоли да би корисник унео први низ*/
фгетс (С1,БУФ_СИЗЕ,стдин); / * складишти стринг за унос корисника у С1 бафер */
С1[ стрлен (С1)-1] = ' 0';

принтф ('Унесите други низ н');/* Одштампајте поруку кориснику да унесе други низ*/
фгетс (С2,БУФ_СИЗЕ,стдин); / * складишти низ за унос корисника у С2 бафер */
С2[ стрлен (С2)-1] = ' 0';

стрцат (С1,С2); / *Позовите стандардну функцију са низовима С1 и С2 */

принтф (' нПовезани низ је %с н н',С1); / *Излаз: С1 се додаје са С2 */

повратак 0;
}

Снимци програма и излаз:

Аутоматски се генерише текстуални опис

Опис текста аутоматски генерисан са средњим поуздањем

Повезивање два низа без коришћења функције библиотеке

Коришћење фор петље за копирање другог низа на крају првог низа.

#инцлуде

#инцлуде

#дефине БУФ_СИЗЕ 256
интглавни()
{
цхарС1[БУФ_СИЗЕ],С2[БУФ_СИЗЕ]; /* Прогласи бафере С1, С2 за оба низа*/
интдужине= 0,и,ј; /*Променљиве потребне за обилазак петље*/

принтф („Унесите први низ“); / * Одштампајте корисничку поруку да бисте унели први низ */
фгетс (С1,БУФ_СИЗЕ,стдин); /* стринг за унос корисника биће ускладиштен у С1*/
С1[ стрлен (С1)-1] = ' 0';

принтф („Унесите други низ“); / * Одштампајте корисничку поруку за унос другог низа */
фгетс (С2,БУФ_СИЗЕ,стдин); /* кориснички унос ће бити ускладиштен у С2*/
С2[ стрлен (С2)-1] = ' 0';
/* Пређите првим низом да бисте пронашли дужину С1*/
за(и=0;С1[и]! =' 0';и++)
{
дужине=дужине+1;
}

/*дужина ће имати крај С1, почети од дужине и копирати цео С2 у С1*/
за(и=дужине,ј=0;С2[ј]! =' 0';и++,ј++)
{
С1[и]=С2[ј];
С1[и]=' 0';
}

/ *Одштампајте С1, спојени резултат */
принтф (' нПовезани низ је %с н н',С1);
повратак 0;
}

Снимци програма и излаз:

Аутоматски се генерише текстуални опис

Аутоматски се генерише текстуални опис

Још један начин без функције библиотеке

Повезивање помоћу рекурзије:

Функција стрингцонцатенате () ће се користити за добијање дужине стринг1. Ако је С2 празан, С2 ће бити додељен нулти знак.

Ако нулл знак није додељен С2, затим додајте елемент С2 на крају С1 који је С1 [и+ј] = С2 [ј], ово повећава вредност и у низу.

Функција ће се сама позвати преношењем реформисаних низова (С1, С2) као аргумент. Позваће се изнова и изнова све док С2 не буде празан.

Сложени С1 ће се штампати главним () као

#инцлуде

#инцлуде

#дефине БУФ_СИЗЕ 256

/ * рекурзивна функција за имплементацију повезивања стрингова према горњем опису */
празнинастрингцонцатенате(цхар *С1,цхар *С2)
{
статичан инти=0;
статичан интј;
ј= стрлен (С1);
ако(!С2[и])
{
С2[и]=' 0';
}
елсе
{
С1[ј] =С2[и];
С1[ј+1] = ' 0';
и++;
стрингцонцатенате(С1,С2);
}
}
интглавни()
{
цхарС1[БУФ_СИЗЕ],С2[БУФ_СИЗЕ];

принтф ('Унесите вредност првог низа:'); / * корисничка порука за унос првог низа */
фгетс (С1,БУФ_СИЗЕ,стдин); / * кориснички унос први низ, чување у С1 */
С1[ стрлен (С1)-1] = ' 0';

принтф ('Унесите вредност другог низа:'); / * корисничка порука за унос 2. низа */
фгетс (С2,БУФ_СИЗЕ,стдин); / * кориснички унос први низ, чување у С2 */
С2[ стрлен (С2)-1] = ' 0';

стрингцонцатенате(С1,С2); / * Позовите функцију са С1, С2 као параметрима */

принтф ('комбинација низова ='%с ' н',С1);
повратак 0;
}

Снимци програма и излаз:

Аутоматски се генерише текстуални опис

Аутоматски се генерише текстуални опис

Повезивање помоћу функција

Функцију стрцонцатенате () позива маин () за комбиновање два низа.

Функција добија дужину стринг1 помоћу стринглен (стринг1).

Придружите елементе стринг2 [и] у стринг1 [и+ј]. Овај корак ће се понављати све док низ није празан. Овде придружујемо стринг2 низу1 на крају низа1.

Повезани низ (низ 1) ће бити примљен до краја када се изврше све итерације фор петље.

Маин () штампа уједињени низ С1

#инцлуде

#инцлуде

#дефине БУФ_СИЗЕ 256

/ * функција за имплементацију повезивања стрингова према горњем опису */
празнинастрцонцатенате(цхар *стринг1, цхар*стринг2)
{
инти;
интј= стрлен (стринг1);
за(и=0;низ2[и];и++)
{
стринг1[и+ј]=стринг2[и];
}
стринг1[и+ј]= ' 0';
}
интглавни()
{
цхарстринг1[БУФ_СИЗЕ],стринг2[БУФ_СИЗЕ];
принтф ('Унесите први низ:'); / * Корисничка порука за први низ */
фгетс (стринг1,БУФ_СИЗЕ,стдин); / * Други низ корисничког уноса, ускладиштен у низу1 */
стринг1[ стрлен (стринг1)-1] = ' 0';

принтф ('Унесите други низ:'); / * Корисничка порука за други низ */
фгетс (стринг2,БУФ_СИЗЕ,стдин); / * Други низ корисничког уноса, ускладиштен у низу2 */
стринг2[ стрлен (стринг2)-1] = ' 0';

стрцонцатенате(стринг1,стринг2); /* Позовите функцију са стринг1 и стринг2 као аргументе*/

принтф ('Резултатски низ = %с' н',стринг1);
повратак 0;
}

Снимци програма и излаз:

Аутоматски се генерише текстуални опис

Аутоматски се генерише текстуални опис

Повезивање стрингова помоћу мемцпи

Коришћењем функције мемцпи (), повезивање низа се врши копирањем речи по реч из једног стринг бафера на крај другог стринг бафера где је величина речи 4 бајта с обзиром на то да радимо на 32 -битној машини, док спајање стрингова вршимо тако што коришћењем повезивања низа помоћу функције стрцат (), повезивање се врши копирањем бајта по бајт из једног стринг бафера у други бафер стринга.

Овај приступ је ефикасан у перформансама.

Једино што треба узети у обзир при коришћењу мемцпи је да водите рачуна о „ 0“.

Ц програм за постизање стрцат -а са мемцпи:

#инцлуде

#инцлуде

#дефине БУФ_СИЗЕ 256

Воид стрцат_мемцпи(цхар *С1, цхар *С2)
{
интдужина1,дужина2;
дужина1= стрлен (С1);
дужина2= стрлен (С2);
мемцпи (С1+дужина1,С2,дужина2);
}
интглавни()
{

цхарстринг1[БУФ_СИЗЕ],стринг2[БУФ_СИЗЕ];
принтф ('Унесите први низ:'); / * Корисничка порука за први низ */
фгетс (стринг1,БУФ_СИЗЕ,стдин); / * Други низ корисничког уноса, ускладиштен у низу1 */
стринг1[ стрлен (стринг1)-1] = ' 0';

принтф ('Унесите други низ:'); / * Корисничка порука за други низ */
фгетс (стринг2,БУФ_СИЗЕ,стдин); / * Други низ корисничког уноса, ускладиштен у низу2 */
стринг2[ стрлен (стринг2)-1] = ' 0';

стрцат_мемцпи(стринг1,стринг2); /* Позовите функцију са стринг1 и стринг2 као аргументе*/

принтф ('Резултатски низ = %с' н',стринг1);
повратак 0;


}

Снимци програма и излаз:

Аутоматски се генерише текстуални опис

Аутоматски се генерише текстуални опис

Закључак:

Уз сву ову дискусију можемо закључити повезивање стрингова у Ц. Видели смо много примера и примера програма за спајање стрингова. Подсетићемо се главних ставки: Постоје два начина, један са стандардом Ц, а други начин који дефинише корисник. Кориснички дефинирано може бити више врста, овисно о томе како корисник жели имплементирати повезивање низова.