adfsfsf   5년 전

c++로 strtok을 대신하는 알고리즘을 검색해서 적용한 코드입니다. 제가 c로 짠 코드를 포팅한 코드입니다. 이중 선 위가 c, 아래가 c++코드입니다. 반례가 있다면 알고 싶습니다.

eric00513   5년 전

이런 복잡하고 긴 코드를 올리실 때, 중요 부분 옆에 주석처리 하고, 그 소스를 설명해 주세요.

djm03178   5년 전

위쪽 코드는 예제도 틀리네요.

adfsfsf   5년 전

위쪽 코드를 잘못된 걸 올렸을 수도 있습니다. 두 코드를 주석을 달아서 새로 올립니다. 만약 지금 새로 올린 코드가 예제를 틀리는 것으로 나오면 잘못 입력하신 겁니다. 또한, 아래 코드는 살짝 수정해서 올립니다.

djm03178   5년 전

여전히 위쪽은 예제가 틀립니다. 마지막에 toot이 하나 더 붙어나오네요.

정말로 저 코드를 그대로 복붙해도 예제가 맞게 나온다면, 어딘가에 잘못된 배열 접근이나 초기화되지 않은 부분 사용 같은 것이 있을 수도 있습니다.

adfsfsf   5년 전

제출하면 맞는 코드로 나옵니다. 저는 확실하게 제대로 나옵니다. 사이트 채점도 맞는 답으로 나옵니다.

adfsfsf   5년 전

만약 아직도 잘못 나오신다면 사이트 데이터 확인이 필요합니다.

djm03178   5년 전

아, 원인을 알 것 같네요. 질문과 상관 없는 내용으로 가서 죄송하지만, 22번째 줄과 같은 문장은 아마도 undefined behavior입니다. 전위 증가 연산자를 사용한다고 해서, 그게 가장 먼저 j의 값을 변경하고 그 뒤에 나오는 j도 새로운 값을 따른다고 보장이 안 됩니다. 그래서 환경에 따라서 동작이 달라질 수 있습니다. 제가 사용하는 VS 2017에서는 저 코드가 다음과 같이 동작합니다.

a[j - 1][strlen(a[j]) - 1] = '\0';

j--;

하지만 원하는 동작은

j--;

a[j][strlen(a[j]) - 1] = '\0';

일 테고, 앞으로는 원래 코드와 같은 위험하고 표준에서 동작이 정의되지 않는 표현 대신에 이와 같은 안전한 방법을 사용하시기 바랍니다.

adfsfsf   5년 전

알겠습니다. 앞으로는 보다 안전한 방법을 찾겠습니다. 하지만 아래 코드의 오류는 그와는 관계가 없는 것 같습니다.

djm03178   5년 전

아래 코드가 맞다고 생각하시는 건 테스트 케이스의 수가 1인 것만 테스트해보셔서 그렇습니다.

adfsfsf   5년 전

감사합니다. 케이스 마지막에 b를 초기화하지 않았군요.

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