c++ 에서 string을 받는 함수에 대해서 (boj 17478)

 

17478번 문제가 이런 형태로 코드를 작성하여서 해결하는데,

void _bar(const char* str, int stk) {
    for(int j=0; j<stk;++j) cout<<"____";
    cout<<str;
}

이렇게 스트링을 받아서 앞에 ____ 을 붙여주는 함수를 여기서 구현해서 문제를 해결한다. 

 

이때에 const char* str 형태를 받는것에 대해서 궁금해서 알아보았다. 

이러한 정보들을 얻을 수 있었다. 그렇다면 내가 접한 코드에서 그런식으로 char 배열로 받는것이 아니라 그냥 string으로 받으면 어떻게 될지 궁금하였다. 

void bar(string str, int cnt) {
    for(int j=0; j<cnt; ++j) cout<<"____";
    cout<<str;
}

const char* 형태로 받는것이 아니라 그냥 그대로 string str이라고 함수를 변경해서 코드를 실행시켜도 결과는 똑같이 나오고, 이걸 그대로 제출 하더라도 정답처리는 문제가 없었다. 

const char* str 형태로 받는것은 C-style string 이라고 생각하면 될것같고, 그냥 그대로 string으로 받아도 문제가 없을것 같다. 

아무래도 이렇게 접했을때 c-style string에 익숙해질 필요가 있을것 같다. 

 

이 두가지와 관련하여서 질문을 하였고 나온 답변을 생각해볼때 const char* str 형태로 받는것이 더 좋을것 같긴 하다. 아무래도 알고리즘 문제를 푸는것에서는 string으로 받으나 const char* 로 받으나 결과물은 큰 차이가 없겠으나 코드 호환성이라는걸 고려해보는 습관을 들이는 측면에서는 const char*로 받는것이 좋을 것으로 보여진다. 

그리고 const char* 로 받으면서 두가지 방향으로 받는것에 대해서 익숙해지면 좋을것 같다. 

 

 

++++++++++++

추가적으로 궁금하여서 찾아보던 중에 나에게 도움이 되는 질문과 답변을 발견하여서 여기에 링크를 첨부한다. 

이 링크에 있는 질문들에 대해서 추가적으로 생각해보면 좋을것 같다. 결국 const char* 형태로 받는것에 익숙해지는게 좋을것 같다는 생각이 더욱 든다. 

https://www.inflearn.com/questions/415817/string%EC%9D%84-const-char-%EB%A1%9C-%EB%B0%94%EA%BF%80-%ED%95%84%EC%9A%94%EA%B0%80-%EC%9E%88%EB%82%98%EC%9A%94

 

string을 const char*로 바꿀 필요가 있나요? - 인프런 | 질문 & 답변

제목 그대로 필요가 있는건가요? - 질문 & 답변 | 인프런

www.inflearn.com

 

네,

string을 const char로 바꿔야 하는 상황은 언제든 있을 수 있습니다.

가령 아래의 상황을 보세요.

 

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
	const char* str1 = "Hello";
	string str2 = "Hello";

	cout << sizeof(str1) << endl;    // 출력 결과: 4
	cout << sizeof(str2) << endl;	 // 출력 결과: 28

	return 0;
}

 

같은 문자열을 출력하였는데도 

char * 가 string에 비해 훨씬 크기가 작습니다.

이는 char * 는 말 그대로 포인터이고, string은 클래스이기 때문입니다.

 

반대로 char * 를 string으로 바꾸는 상황도 왕왕 있는데, 

이는 주로 string의 기능들을 사용하기 위한 경우가 많습니다.

 

예를 들어, char * 는 string.h의 .size() 같은 기능을 사용할 수 없습니다.

 

#include <iostream>
#include <string.h>

using namespace std;

int main()
{
	const char* str1 = "Hello";
	string str2 = "Hello";

	// 사용 불가
	// cout << str1.size() << endl;
	cout << str2.size() << endl;

	return 0;
}

 

답변이 되었길 바랍니다.

감사합니다.

 

===============

 

또 웃기는게 이번에는 string으로 받으라고 하네. 일관되지가 않은 추천이라 결국 내가 상황에 맞게 취사선택 해야할것 같다. 

 

  Comments,     Trackbacks