Конкатенация строк C

C String Concatenation



Конкатенация - это процесс добавления второй строки в конец первой строки. В этой статье мы собираемся обсудить, как объединять строки в C, используя разные методы.

Стандартная функция библиотеки C, которая используется для объединения строк, - это strcat ().







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

$char * strcat (str1,ул2);

где str1 - первая строка, а str2 - вторая строка. Возвращаемое значение функции - указатель на объединенную строку.



Теперь на примере посмотрим, как выполняется конкатенация.



Пример1:

$ strcat (str1,ул2);
где str1 это Белла
str2 - это Whitmann

после конкатенации строки,первая строка будет

str1 Белла Уитманн
str2 Whitmann

в то время как строка2 останется прежней.





Пример 2:

$ strcat (ул2,str1);
где str1 это Белла
str2 - это Whitmann

после конкатенации строки,объединенная строка будет

str1 Bella
str2 Белла Уитманн

а строка1 останется прежней.

Объявление в файле заголовка C

Функции обработки строк объявлены в заголовочном файле. Если кто-то хочет использовать стандартную функцию для объединения, этот файл заголовка должен быть включен.



Следовательно, мы можем добиться конкатенации строк двумя способами. Один - с использованием стандартной функции библиотеки C, а другой - без использования функции библиотеки C. Ниже приведены примеры программ для демонстрации обоих способов. Объединение строк без использования функции библиотеки C может быть реализовано несколькими способами.

Мы обсудим это также в следующих разделах с примерами.

Объединение двух строк с помощью функции библиотеки C

#включают

#включают

#define BUF_SIZE 256
intглавный()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Два строковых буфера * /

printf ('Введите первую строку п'); ] / * Вывести сообщение в консоль, чтобы пользователь мог ввести первую строку * /
fgets (S1,BUF_SIZE,стандартный ввод); / * сохраняем строку ввода пользователя в буфере S1 * /
S1[ Strlen (S1)-1] знак равно ' 0';

printf ('Введите вторую строку п');/ * Распечатать сообщение пользователю для ввода второй строки * /
fgets (S2,BUF_SIZE,стандартный ввод); / * сохраняем строку ввода пользователя в буфере S2 * /
S2[ Strlen (S2)-1] знак равно ' 0';

strcat (S1,S2); / * Вызов стандартной функции со строками S1 и S2 * /

printf (' пОбъединенная строка% s п п',S1); / * Вывод: к S1 добавляется S2 * /

возвращение 0;
}

Снимки программы и вывода:

Текстовое описание создается автоматически

Текстовое описание создается автоматически со средней степенью достоверности

Объединение двух строк без использования библиотечной функции

Использование цикла for для копирования второй строки в конец первой строки.

#включают

#включают

#define BUF_SIZE 256
intглавный()
{
charS1[BUF_SIZE],S2[BUF_SIZE]; / * Объявляем буферы S1, S2 для обеих строк * /
intдлиназнак равно 0,я,j; / * Переменные, необходимые для обхода цикла * /

printf ('Введите первую строку'); / * Распечатать сообщение пользователя для ввода первой строки * /
fgets (S1,BUF_SIZE,стандартный ввод); / * строка ввода пользователя будет сохранена в S1 * /
S1[ Strlen (S1)-1] знак равно ' 0';

printf ('Введите вторую строку'); / * Распечатать сообщение пользователя для ввода второй строки * /
fgets (S2,BUF_SIZE,стандартный ввод); / * строка ввода пользователя будет сохранена в S2 * /
S2[ Strlen (S2)-1] знак равно ' 0';
/ * Обходим первую строку, чтобы найти длину S1 * /
для(язнак равно0;S1[я]знак равно' 0';я++)
{
длиназнак равнодлина+1;
}

/ * длина будет иметь конец S1, начинаться с длины и скопировать весь S2 в S1 * /
для(язнак равнодлина,jзнак равно0;S2[j]знак равно' 0';я++,j++)
{
S1[я]знак равноS2[j];
S1[я]знак равно' 0';
}

/ * Вывести объединенный результат S1 * /
printf (' пОбъединенная строка% s п п',S1);
возвращение 0;
}

Снимки программы и вывода:

Текстовое описание создается автоматически

Текстовое описание создается автоматически

Еще один способ обойтись без библиотечной функции

Конкатенация с использованием рекурсии:

Функция stringconcatenate () будет использоваться для получения длины строки string1. Если S2 пуст, то S2 будет присвоен нулевой символ.

Если нулевой символ не назначен для S2, чем добавить элемент S2 в конце S1, то есть S1 [i + j] = S2 [j], это увеличивает значение i в строке.

Функция будет вызываться путем передачи преобразованных строк (S1, S2) в качестве аргумента. Он будет вызываться снова и снова, пока S2 не опустеет.

Объединенный S1 будет напечатан main () как

#включают

#включают

#define BUF_SIZE 256

/ * рекурсивная функция для реализации конкатенации строк согласно приведенному выше описанию * /
пустотастрока(char *S1,char *S2)
{
статический intязнак равно0;
статический intj;
jзнак равно Strlen (S1);
если(!S2[я])
{
S2[я]знак равно' 0';
}
еще
{
S1[j] знак равноS2[я];
S1[j+1] знак равно ' 0';
я++;
строка(S1,S2);
}
}
intглавный()
{
charS1[BUF_SIZE],S2[BUF_SIZE];

printf ('Введите значение первой строки:'); / * сообщение пользователя для ввода 1-й строки * /
fgets (S1,BUF_SIZE,стандартный ввод); / * пользователь вводит первую строку, сохраняет в S1 * /
S1[ Strlen (S1)-1] знак равно ' 0';

printf ('Введите значение второй строки:'); / * сообщение пользователя для ввода второй строки * /
fgets (S2,BUF_SIZE,стандартный ввод); / * пользователь вводит первую строку, сохраняет в S2 * /
S2[ Strlen (S2)-1] знак равно ' 0';

строка(S1,S2); / * Вызов функции с параметрами S1, S2 * /

printf ('комбинация строк ='% s ' п',S1);
возвращение 0;
}

Снимки программы и вывода:

Текстовое описание создается автоматически

Текстовое описание создается автоматически

Конкатенация с использованием функций

Функция strconcatenate () вызывается функцией main () для объединения двух строк.

Функция получает длину строки string1 с помощью stringlen (string1).

Присоедините элементы строки2 [i] к строке1 [i + j]. Этот шаг будет повторяться, пока строка не станет пустой. Здесь мы присоединяем строку2 к строке1 в конце строки1.

Объединенная строка (строка 1) будет получена к концу, когда будут выполнены все итерации цикла for.

Main () печатает объединенную строку S1

#включают

#включают

#define BUF_SIZE 256

/ * функция для реализации конкатенации строк согласно приведенному выше описанию * /
пустотаstrconcatenate(char *строка1, char*строка2)
{
intя;
intjзнак равно Strlen (строка1);
для(язнак равно0;нить2[я];я++)
{
строка1[я+j]знак равнострока2[я];
}
строка1[я+j]знак равно ' 0';
}
intглавный()
{
charстрока1[BUF_SIZE],строка2[BUF_SIZE];
printf ('Введите первую строку:'); / * Пользовательское сообщение для 1-й строки * /
fgets (строка1,BUF_SIZE,стандартный ввод); / * Введенная пользователем вторая строка, сохраненная в строке1 * /
строка1[ Strlen (строка1)-1] знак равно ' 0';

printf ('Введите вторую строку:'); / * Пользовательское сообщение для 2-й строки * /
fgets (строка2,BUF_SIZE,стандартный ввод); / * Введенная пользователем вторая строка, сохраненная в строке2 * /
строка2[ Strlen (строка2)-1] знак равно ' 0';

strconcatenate(строка1,строка2); / * Вызов функции с аргументами string1 и string2 * /

printf ('Результирующая строка =% s' п',строка1);
возвращение 0;
}

Снимки программы и вывода:

Текстовое описание создается автоматически

Текстовое описание создается автоматически

Объединение строк с помощью memcpy

При использовании функции memcpy () конкатенация строки выполняется пословным копированием из одного строкового буфера в конец другого строкового буфера, где размер слова составляет 4 байта, учитывая, что мы работаем на 32-битной машине, а когда мы выполняем конкатенацию строк с помощью При использовании конкатенации строк с помощью функции strcat () конкатенация выполняется побайтным копированием из одного строкового буфера в другой строковый буфер.

Такой подход эффективен с точки зрения производительности.

Единственное, что нужно учитывать при использовании memcpy - позаботиться о « 0».

Программа на C для достижения strcat с помощью memcpy:

#включают

#включают

#define BUF_SIZE 256

Пустота strcat_memcpy(char *S1, char *S2)
{
intдлина1,длина2;
длина1знак равно Strlen (S1);
длина2знак равно Strlen (S2);
memcpy (S1+длина1,S2,длина2);
}
intглавный()
{

charстрока1[BUF_SIZE],строка2[BUF_SIZE];
printf ('Введите первую строку:'); / * Пользовательское сообщение для 1-й строки * /
fgets (строка1,BUF_SIZE,стандартный ввод); / * Введенная пользователем вторая строка, сохраненная в строке1 * /
строка1[ Strlen (строка1)-1] знак равно ' 0';

printf ('Введите вторую строку:'); / * Пользовательское сообщение для 2-й строки * /
fgets (строка2,BUF_SIZE,стандартный ввод); / * Введенная пользователем вторая строка, сохраненная в строке2 * /
строка2[ Strlen (строка2)-1] знак равно ' 0';

strcat_memcpy(строка1,строка2); / * Вызов функции с аргументами string1 и string2 * /

printf ('Результирующая строка =% s' п',строка1);
возвращение 0;


}

Снимки программы и вывода:

Текстовое описание создается автоматически

Текстовое описание создается автоматически

Заключение:

На этом обсуждение мы можем завершить конкатенацию строк в C. Мы видели много примеров и примеров программ для конкатенации строк. Напомним основные моменты: есть два способа, один со стандартом C, а другой - определяемый пользователем. Определяемые пользователем могут быть многих типов, в зависимости от того, как пользователь хочет реализовать конкатенацию строк.