기록하는 공부

[C/Algorithm] 문자열 거꾸로 출력하기/문자열 역순으로 출력하기/포인터활용/포인터예제 본문

Language/C

[C/Algorithm] 문자열 거꾸로 출력하기/문자열 역순으로 출력하기/포인터활용/포인터예제

SS_StudySteadily 2023. 4. 8. 17:27
728x90
반응형

 

예제코드

 

#include <stdio.h>
#include <string.h>

main() {
	
	int k, n;
	char st[] = "I am Baki";
	char temp;
	n = strlen(st);			//st 문자열의 길이인 9를 변수 n에 저장 
	n--;					//n값에서 1을 뺀 후 다시 n에 저장 (n=8)
	
	printf("%s\n", st);		//st 문자열 출력 
	
	for(k=0; k<n; k++) {	//0부터 n의 값인 8 미만까지 반복 
		temp = *(st+k);		//temp 변수에 st 주소 값에 k만큼 더한 주소에 해당하는 값을 저장 
		*(st+k) = *(st+n);	//st 주소 값에 k만큼 더한 주소에 해당하는 값에 st 주소 값에 n만큼 더한 주소에 해당하는 값을 저장 
		*(st+n) = temp;		//st 주소 값에 n만큼 더한 주소에 해당하는 값에 temp 값 저장 
		n--;				//n값 감소 
	}
	
	printf("%s\n", st);		//역순으로 저장된 문자열 출력 
}

 

 

 

 

int k, n;
char st[] = "I am Baki";
char temp;
n = strlen(st);
n--;

 

 

정수형 변수 k, n을 선언한다.

 

배열을 선언할 때 사용할 개수를 생략하고 초기값을 지정하면, 초기값으로 지정된 값의 수와 같은 크기의 배열이 선언되는데,

초기값이 문자열인 경우 널 문자가 들어가기 때문에 문자열의 크기보다 1 큰 배열이 만들어진다.

 

문자형 변수 temp를 선언한다.

 

strlen()은 문자열의 길이는 함수로, st가 가리키는 문자열인 "I am Baki'의 길이인 9를 변수 n에 저장한다.

또한, strlen()함수는 널 문자(\0)를 제외한 순수한 문자열의 길이만 구한다.

 

n의 값을 1을 감소시킨다.

c언어에서는 배열의 위치가 0부터 시작되어 배열 st는 st[0]부터 st[8]까지 9개의 문자를 저장하게 된다.

즉, 교환할 문자의 끝 위치는 8번째이기 때문에 n을 1 감소시킨다.

 

 

 

for(k=0; k<n; k++) {
	temp = *(st+k);
	*(st+k) = *(st+n);
	*(st+n) = temp;
	n--;
	}

 

 

반복 변수 k가 0부터 1씩 증가하면서 n(=8)보다 작을 때까지 반복한다.

n--; 명령을 수행하여 문자의 끝 위치를 하나씩 앞으로 당긴다.

 

temp에 배열 st가 가리키는 곳의 주소에서 k만큼 증가한 주소가 가리키는 곳의 값(*(st+k))을 저장한다.

(st+k)가 가리키는 곳의 값을 (st+n)이 가리키는 곳의 값으로 치환한다.

(st+n)의 값도 temp 값으로 치환한다.

n의 값을 1 감소시킨다.

 

 

 

 

 

이해하기 쉽도록 k의 값에 값을 대입해보자.

 

k가 0일 때, n은 8이게 된다.

이때, st[0]과 st[8]의 값을 교환한다.

그리고 n값 1 감소

 

k가 1일 때, n은 7이게 된다.

이때, st[1]과 st[7]의 값을 교환한다.

그리고 n값 1 감소

 

k가 2일 때, n은 6이게 된다.

이때, st[2]과 st[6]의 값을 교환한다.

그리고 n값 1 감소

 

...

 

이렇게 k의 값이 n값보다 작을 때까지 반복된다.

 

 

 

 


 

 

 

실행결과

 

 

728x90
반응형