C 문자열 연결

C String Concatenation



연결은 첫 번째 문자열의 끝에 두 번째 문자열을 추가하는 프로세스입니다. 이 기사에서는 다른 방법을 사용하여 C에서 문자열을 연결하는 방법에 대해 논의할 것입니다.

문자열을 연결하는 데 사용되는 표준 C 라이브러리 함수는 strcat()입니다.







기능 프로토타입:

$ * strcat (str1,str2);

여기서 str1은 첫 번째 문자열이고 str2는 두 번째 문자열입니다. 함수의 반환 값은 연결된 문자열에 대한 포인터입니다.



이제 예제를 통해 연결이 수행되는 방식을 살펴보겠습니다.



예 1:

$ strcat (str1,str2);
여기서 str1은 벨라입니다.
str2는 휘트만

문자열 연결 후,첫 번째 문자열은

str1 벨라 휘트만
str2 휘트만

string2는 동일하게 유지됩니다.





예2:

$ strcat (str2,str1);
여기서 str1은 벨라입니다.
str2는 휘트만

문자열 연결 후,연결된 문자열은

str1 벨라
str2 벨라 휘트만

반면 string1은 동일하게 유지됩니다.

C 헤더 파일의 선언

문자열 처리 함수는 헤더 파일 아래에 선언됩니다. 표준 기능을 사용하여 연결하려면 이 헤더 파일을 포함해야 합니다.



따라서 두 가지 방법으로 문자열 연결을 달성할 수 있습니다. 하나는 표준 C 라이브러리 기능을 사용하는 것이고 다른 하나는 C 라이브러리 기능을 사용하지 않는 것입니다. 다음은 두 가지 방법을 모두 보여주는 예제 프로그램입니다. C 라이브러리 함수를 사용하지 않고 문자열 연결은 여러 가지 방법으로 구현할 수 있습니다.

다음 섹션에서 예제와 함께 이에 대해서도 논의할 것입니다.

C 라이브러리 함수를 사용하여 두 문자열 연결

#포함하다

#포함하다

#define BUF_SIZE 256
정수기본()
{
S1[BUF_SIZE],시즌2[BUF_SIZE]; /* 두 개의 문자열 버퍼 */

인쇄 ('첫 번째 문자열을 입력하십시오.N'); ] /* 사용자가 첫 번째 문자열을 입력할 수 있도록 콘솔에 메시지 출력*/
fgets (S1,BUF_SIZE,표준 입력); /* 사용자 입력 문자열을 S1 버퍼에 저장 */
S1[ 스트렌 (S1)-1] = ' 0';

인쇄 ('두 번째 문자열을 입력하세요.N');/* 두 번째 문자열을 입력하기 위해 사용자에게 메시지 출력*/
fgets (시즌2,BUF_SIZE,표준 입력); /* 사용자 입력 문자열을 S2 버퍼에 저장 */
시즌2[ 스트렌 (시즌2)-1] = ' 0';

strcat (S1,시즌2); /*S1 및 S2 문자열로 표준 함수 호출 */

인쇄 ('N연결된 문자열은 %s입니다.NN',S1); /*출력: S1에 S2가 추가됨 */

반품 0;
}

프로그램 및 출력의 스냅샷:

자동으로 생성된 텍스트 설명

중간 신뢰도로 자동 생성된 텍스트 설명

라이브러리 함수를 사용하지 않고 두 문자열 연결

for 루프를 사용하여 첫 번째 문자열의 끝에서 두 번째 문자열을 복사합니다.

#포함하다

#포함하다

#define BUF_SIZE 256
정수기본()
{
S1[BUF_SIZE],시즌2[BUF_SIZE]; /* 두 문자열 모두에 대해 버퍼 S1, S2 선언*/
정수길이= 0,NS,제이; /*루프 순회에 필요한 변수*/

인쇄 ('첫 번째 문자열 입력'); /* 첫 번째 문자열을 입력하기 위한 사용자 메시지 출력 */
fgets (S1,BUF_SIZE,표준 입력); /* 사용자 입력 문자열은 S1에 저장됩니다*/
S1[ 스트렌 (S1)-1] = ' 0';

인쇄 ('두 번째 문자열 입력'); /* 두 번째 문자열을 입력하기 위한 사용자 메시지 출력 */
fgets (시즌2,BUF_SIZE,표준 입력); /* 사용자 입력 문자열은 S2에 저장됩니다*/
시즌2[ 스트렌 (시즌2)-1] = ' 0';
/* 첫 번째 문자열을 탐색하여 S1의 길이를 찾습니다.*/
~을위한(NS=0;S1[NS]! =' 0';NS++)
{
길이=길이+1;
}

/*length는 S1의 끝을 가지며, length에서 시작하여 전체 S2를 S1에 복사합니다*/
~을위한(NS=길이,제이=0;시즌2[제이]! =' 0';NS++,제이++)
{
S1[NS]=시즌2[제이];
S1[NS]=' 0';
}

/*S1, 연결된 결과 출력 */
인쇄 ('N연결된 문자열은 %s입니다.NN',S1);
반품 0;
}

프로그램 및 출력의 스냅샷:

자동으로 생성된 텍스트 설명

자동으로 생성된 텍스트 설명

라이브러리 기능이 없는 또 다른 방법

재귀를 사용한 연결:

stringconcatenate() 함수는 string1의 길이를 얻는 데 사용됩니다. S2가 비어 있으면 S2에 널 문자가 할당됩니다.

S1[i+j]=S2[j]인 S1의 끝에 S2의 요소를 추가하는 것보다 S2에 null 문자가 할당되지 않으면 문자열의 i 값이 증가합니다.

함수는 수정된 문자열(S1,S2)을 인수로 전달하여 자체적으로 호출됩니다. S2가 비어 있을 때까지 계속해서 호출됩니다.

연결된 S1은 main()에 의해 다음과 같이 인쇄됩니다.

#포함하다

#포함하다

#define BUF_SIZE 256

/* 위의 설명에 따라 문자열 연결을 구현하는 재귀 함수 */
무효의문자열 연결( *S1, *시즌2)
{
공전 정수NS=0;
공전 정수제이;
제이= 스트렌 (S1);
만약(!시즌2[NS])
{
시즌2[NS]=' 0';
}
또 다른
{
S1[제이] =시즌2[NS];
S1[제이+1] = ' 0';
NS++;
문자열 연결(S1,시즌2);
}
}
정수기본()
{
S1[BUF_SIZE],시즌2[BUF_SIZE];

인쇄 ('첫 번째 문자열의 값을 입력하세요:'); /* 첫 번째 문자열을 입력하기 위한 사용자 메시지 */
fgets (S1,BUF_SIZE,표준 입력); /* 사용자 입력 첫 번째 문자열, S1에 저장 */
S1[ 스트렌 (S1)-1] = ' 0';

인쇄 ('두 번째 문자열의 값을 입력하세요:'); /* 두 번째 문자열을 입력하기 위한 사용자 메시지 */
fgets (시즌2,BUF_SIZE,표준 입력); /* 사용자 입력 첫 번째 문자열, S2에 저장 */
시즌2[ 스트렌 (시즌2)-1] = ' 0';

문자열 연결(S1,시즌2); /* 매개변수로 S1,S2를 사용하여 함수 호출 */

인쇄 ('문자열 조합 = '%s'N',S1);
반품 0;
}

프로그램 및 출력의 스냅샷:

자동으로 생성된 텍스트 설명

자동으로 생성된 텍스트 설명

함수를 사용한 연결

strconcatenate() 함수는 두 문자열을 결합하기 위해 main()에 의해 호출됩니다.

이 함수는 stringlen(string1)을 사용하여 string1의 길이를 가져옵니다.

string1[i+j]에서 string2[i]의 요소를 연결합니다. 이 단계는 문자열이 비어 있을 때까지 반복됩니다. 여기에서 string1의 끝에 string2를 string1에 연결합니다.

연결된 문자열(문자열 1)은 for 루프의 모든 반복이 수행될 때 끝에 수신됩니다.

main()은 연결된 문자열 S1을 인쇄합니다.

#포함하다

#포함하다

#define BUF_SIZE 256

/* 위의 설명에 따라 문자열 연결을 구현하는 함수 */
무효의strconcatenate( *문자열1, *문자열2)
{
정수NS;
정수제이= 스트렌 (문자열1);
~을위한(NS=0;2[NS];NS++)
{
문자열1[NS+제이]=문자열2[NS];
}
문자열1[NS+제이]= ' 0';
}
정수기본()
{
문자열1[BUF_SIZE],문자열2[BUF_SIZE];
인쇄 ('첫 번째 문자열을 입력하세요:'); /* 첫 번째 문자열에 대한 사용자 메시지 */
fgets (문자열1,BUF_SIZE,표준 입력); /* 사용자 입력 두 번째 문자열, string1에 저장 */
문자열1[ 스트렌 (문자열1)-1] = ' 0';

인쇄 ('두 번째 문자열 입력:'); /* 두 번째 문자열에 대한 사용자 메시지 */
fgets (문자열2,BUF_SIZE,표준 입력); /* 사용자 입력 두 번째 문자열, string2에 저장 */
문자열2[ 스트렌 (문자열2)-1] = ' 0';

strconcatenate(문자열1,문자열2); /* string1과 string2를 인수로 사용하여 함수 호출*/

인쇄 ('결과 문자열 = %s'N',문자열1);
반품 0;
}

프로그램 및 출력의 스냅샷:

자동으로 생성된 텍스트 설명

자동으로 생성된 텍스트 설명

memcpy를 사용한 문자열 연결

memcpy() 함수를 사용하여 문자열 연결은 32비트 시스템에서 실행 중임을 고려할 때 한 문자열 버퍼에서 다른 문자열 버퍼의 끝까지 단어별로 복사하여 수행됩니다. strcat() 함수를 사용하여 문자열 연결을 사용하는 연결은 한 문자열 버퍼에서 다른 문자열 버퍼로 바이트 단위로 복사하여 수행됩니다.

이 접근 방식은 성능이 효율적입니다.

memcpy를 사용할 때 유일한 고려 사항은 ''을 처리하는 것입니다.

memcpy로 strcat을 달성하는 C 프로그램:

#포함하다

#포함하다

#define BUF_SIZE 256

무효 strcat_memcpy( *S1, *시즌2)
{
정수길이1,길이2;
길이1= 스트렌 (S1);
길이2= 스트렌 (시즌2);
memcpy (S1+길이1,시즌2,길이2);
}
정수기본()
{

문자열1[BUF_SIZE],문자열2[BUF_SIZE];
인쇄 ('첫 번째 문자열을 입력하세요:'); /* 첫 번째 문자열에 대한 사용자 메시지 */
fgets (문자열1,BUF_SIZE,표준 입력); /* 사용자 입력 두 번째 문자열, string1에 저장 */
문자열1[ 스트렌 (문자열1)-1] = ' 0';

인쇄 ('두 번째 문자열 입력:'); /* 두 번째 문자열에 대한 사용자 메시지 */
fgets (문자열2,BUF_SIZE,표준 입력); /* 사용자 입력 두 번째 문자열, string2에 저장 */
문자열2[ 스트렌 (문자열2)-1] = ' 0';

strcat_memcpy(문자열1,문자열2); /* string1과 string2를 인수로 사용하여 함수 호출*/

인쇄 ('결과 문자열 = %s'N',문자열1);
반품 0;


}

프로그램 및 출력의 스냅샷:

자동으로 생성된 텍스트 설명

자동으로 생성된 텍스트 설명

결론:

이 모든 논의를 통해 우리는 C에서 문자열 연결을 끝낼 수 있습니다. 우리는 문자열 연결에 대한 많은 예제와 샘플 프로그램을 보았습니다. 주요 항목을 기억할 것입니다. 두 가지 방법이 있습니다. 하나는 C 표준이고 다른 하나는 사용자 정의 방법입니다. 사용자 정의는 사용자가 문자열 연결을 구현하려는 방법에 따라 더 많은 유형이 될 수 있습니다.