djswpsk1024   6년 전

C만 배우고 C++은 제대로 배워본 적 없지만, 여기저기 공부해가면서 하고 있습니다.

정말 누구든지 미개한 저에게 도움을 주셨으면 좋겠습니다. 

지금 너무 궁금한게 char배열과 string의 차이? 입니다.


현재 개인적으로 면접 책에서 자바 언어로 쓰여진 문제를 푸는 중에 한 가지 문제에 직면했습니다.

문자열 하나를 입력 받고 이것을 우선적으로 알파벳 순서대로 정렬하고 싶은데, string은 혹시 자체요소 변경불가능인가요?

하려면 char배열을 결국 사용해야 하는건가요? 이러한 문자열 하나를 입력받고 그 안의 문자들을 정렬할 때에 <algorithm>은 사용할 수 없는건가요?

또 궁금한게, 보통 문자열 관련 문제를 해결할 때, char를 주로 사용하시나요? 아니면 string을 주로 사용하시나요?

char배열을 활용하는건 C++스럽지 못하고, C스럽다? 라는 글을 본 이후로 먼가... 좀 쓰는데 찝찝하네요... ㅠㅠㅠㅠ


질문이 알아보기 힘들지만 도와주세요... ㅠㅠㅠ 조언 부탁드립니다...

djm03178   6년 전

C++의 string은 "문자열"이라는 것을 "char형의 연속"같이 복잡한 요소가 아닌 하나의 "객체"로 볼 수 있게 해주는 클래스입니다. 내부적으로는 char형 배열 (동적할당)을 사용하니까 결국 근본은 같습니다. 하지만 사용자의 입장에서는 더이상 문자열을 char형의 연속으로 보고 개별적인 처리(널 문자, 문자열 덧붙이기, 복사, 공간 늘리기 등)을 문자 단위로 해줄 필요가 없고, 그저 string 클래스가 제공하는 편리한 메서드들을 사용만 하면 될 뿐입니다.

하지만 문자열 자체를 객체로 본다는 건 그만큼 내부의 세부적인 조작을 직접 하기는 힘들다는 것을 의미합니다. 문자열 내부의 문자들을 정렬한다는 건 그런 것 중 하나라고 할 수 있는데, 왜냐하면 이 경우 우리는 이 문자열을 하나의 객체처럼 보고 싶은 게 아니라 단순히 char형 여러 개를 담고 있는 배열로 보고 싶은 것이기 때문입니다. 그렇다면, 굳이 string을 쓸 필요 없이, 한 문자씩 제어를 할 수 있는 char형 배열을 쓰는 편이 낫겠죠.

gunwookim   6년 전

char 의 장점 : 메모리공간이 크다.(차지하는 메모리가 작다)

char 의 단점 : 한번에 복사가 안된다.(s =  char형,s2 = char형 이라할때, s = s2 이 명령어가 안됨)

string 의 장점 : 한번에 복사가 된다.(s =  string형,s2 = string형 이라할때, s = s2 이 명령어가 됨)

string 의 장점2 : s라는 배열이 string이라면, s의 배열크기(명령어 s.length())(지금까지 저장한 문자의 갯수(만약 띄엄 띄엄 저장하시면 안될수도 있어요.) )등등 있습니다. 그리고 정렬을 할때는 sort(s.begin(),s.end()) 이렇게 쓸수도 있습니다.

string 의 단점 : 메모리공간이 크다.(차지하는 메모리가 작다)


틀린예 :

int main()

{

   char a[10005],b[10005];

   scanf("%s",&a);

   a = b; //(에러남)

}


맞는예 :

int main()

{

   string a,b;

   scanf("%s",&a);

   a = b; //(에러안남)

}


저의 평가 : 만약 문제를 푸실때 메모리제한이 크시면 string 쓰셔도 됩니다.

                  하지만 string배열을 100만 넘게 잡으시면 메모리 초과가 날수도 있습니다.

djswpsk1024   6년 전

답변 주신 분들 너무너무 감사드립니다!!!

댓글을 작성하려면 로그인해야 합니다.