Coding Test

문자열 겹쳐쓰기

honey-vision 2024. 5. 29. 12:55

문자열 위에 문자열을 겹쳐 값을 출력하는 코드다.

 

 

변경할 문자열 my_string, 겹치게 할 문자열 overwrite_string, 겹치는 시작 위치 s 이렇게 3개의 인자를 받는다.
char* solution(const char* my_string, const char* overwrite_string, int s) {

 

strlen()을 사용하여 my_string의 문자열 길이와 overwrite_string 의 길이를 구한다.
size_t my_string_length = strlen(my_string);

size_t overwrite_length = strlen(overwrite_string);

 

문자열의 끝인 null을 고려해 1을 더해주며 메모리를 할당한다.
char* answer = (char*)malloc((my_string_length + 1) * sizeof(char));

 

문자열을 복사하는 strcpy() 함수를 사용해 my_string에 저장되어있는 문자열을 answer에  복사한다.
strcpy(answer, my_string);

answers 위치부터 overwrite_stringoverwrite_length만큼 복사하여 덮어준다.
strncpy(answer + s, overwrite_string, overwrite_length);

return answer;
}

int main() {

const int MAX_LENGTH = 1000;

char* my_string = (char*)malloc(MAX_LENGTH * sizeof(char));
char* overwrite_string = (char*)malloc(MAX_LENGTH * sizeof(char));
int s;
scanf("%s %s %d", my_string, overwrite_string, &s);
    
char* result = solution(my_string, overwrite_string, s);
 
printf("%s\n", result);

return 0;
}

 

전체 코드는 다음과 같다.

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

char* solution(const char* my_string, const char* overwrite_string, int s) {

	size_t my_string_length = strlen(my_string);
	size_t overwrite_length = strlen(overwrite_string);

	char* answer = (char*)malloc((my_string_length + 1) * sizeof(char));
    
	strcpy(answer, my_string);
	strncpy(answer + s, overwrite_string, overwrite_length);

	return answer;
}

int main() {

	const int MAX_LENGTH = 1000;
	
	char* my_string = (char*)malloc(MAX_LENGTH * sizeof(char));
	char* overwrite_string = (char*)malloc(MAX_LENGTH * sizeof(char));
	int s;
	scanf("%s %s %d", my_string, overwrite_string, &s);
    
	char* result = solution(my_string, overwrite_string, s);
 
	printf("%s\n", result);

	return 0;
}

'Coding Test' 카테고리의 다른 글

두 수의 나눗셈  (0) 2024.06.05
각도기  (0) 2024.06.02
문자열 돌리기  (0) 2024.05.24
특수문자 출력하기  (0) 2024.05.23
tolower(), toupper() 대소문자 변환 문제  (0) 2024.05.22