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* 형태로 받는것에 익숙해지는게 좋을것 같다는 생각이 더욱 든다.
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으로 받으라고 하네. 일관되지가 않은 추천이라 결국 내가 상황에 맞게 취사선택 해야할것 같다.
'알고리즘 > BOJ' 카테고리의 다른 글
c++ N-Queen 문제에서 영어로 row와 column이 헷갈려서 기억하려고 작성. (0) | 2023.04.24 |
---|---|
c++ 전역변수로 선언된 char board[n][n];에 대하여. (0) | 2023.04.22 |
c++ 메모리 초과가 떠서 int를 몇개를 잡으면 128mb가 넘나 알아보았다. (0) | 2023.04.21 |
c++ 아주 큰 수를 다룰 경우 __int128에 대하여. (0) | 2023.04.21 |
boj 16120번 문제와 연관된 string으로 입력을 받았을때, 글자의 숫자를 알아내서 for문을 몇번 돌릴지에 사용하는 방법에 대하여. (0) | 2023.04.20 |