인프런 커뮤니티 질문&답변

kkim360님의 프로필 이미지
kkim360

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-I

2- I segmentation fault

작성

·

124

·

수정됨

0

안녕하세요 선생님 해당 코드는 정답코드입니다. 그러나 제가 주석처리한부분으로 코드를 짰을때는 segmentation error가 나와서 그 이유를 여쭤보고 싶습니다.

또한 선생님께서는 size()를 사용하셨고 저는 length()를 사용했는데 size()와 length()의 장단점도 알고싶습니다

 

http://boj.kr/df71a1d8b94a49cca8ed3d2cbb104d78

감사합니다

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

	// if(s1.length() == s2.length()){
	// 	int i = 0;
	// 	while(s1[i] == s2[i]){
	// 		i++;
	// 	}
	// 	return s1[i] < s2[i];
	// }

이렇게만 bool 함수를 작성하셨다면 s1와 s2의 길이가 다를 때는 어떻게 하는지가 명시가 되어있지 않아서 에러가 뜨는 것 같습니다. 모든 경우의 수를 고려한 bool 함수를 구축해야 합니다.

 

또한 선생님께서는 size()를 사용하셨고 저는 length()를 사용했는데 size()와 length()의 장단점도 알고싶습니다

>>

C++의 std::string 클래스에서 length()size()는 동일한 기능을 제공합니다. 저는 개인적으로 size()가 글자수가 적기 때문에 이를 애용하는 편입니다.

 

참고로 공통점은 다음과 같습니다.

공통점

  • length()size()는 모두 문자열의 길이(문자의 개수)를 반환합니다.

  • 반환 값의 타입은 std::string::size_type입니다.



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

kkim360님의 프로필 이미지
kkim360
질문자

선생님 length()와 size()의 반환 타입이 int값이 아님에도 불구하고 int형과 비교연산자를 사용할 수 있는 이유는 뭔가요??

예시 코드입니다!

int I = 0;
vector<int> v;

if(I == v.length()) cout << "same!";

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 ㅎㅎ

int와 std::size_t를 비교할 때는 int는 size_t로 변환되서 비교가 됩니다. 이를 유형 변환( type conversion 또는 type promotion)이 일어났다라고 합니다.

참고로 size_t는 0부터 특정양수까지 표현되므로 음수와 size_t타입을 비교할 때는 주의해야 합니다.

size_t의 범위

  • 32비트 시스템: size_t는 4바이트(32비트), 0에서 4,294,967,295(2^32 - 1)까지

  • 64비트 시스템: size_t는 8바이트(64비트), 0에서 18,446,744,073,709,551,615(2^64 - 1)까지

 

감사합니다.

kkim360님의 프로필 이미지
kkim360

작성한 질문수

질문하기