ehgusdl0903   2년 전

배열 어느부분이 잘못된건지 모르겠습니다.

bamgoesn   2년 전

"bcab"를 입력했을 때 24행의 루프문이 이상한 동작을 합니다. 한번 살펴보세요.

또한 문자열의 길이 제한이 1000자인데, S의 크기를 1000으로 설정하면 문자열을 제대로 읽지 못합니다. 문자열의 끝에는 널문자가 와야 하기 때문입니다. 조금 더 여유있게 한 1010정도 크기를 주는 걸 추천합니다. S2도 마찬가지입니다.

그리고 strlen은 문자열의 길이 N에 대해 시간복잡도가 O(N)입니다. strlen은 문자열의 문자를 순차적으로 널문자가 나올 때까지 루프를 돌기 때문입니다. 따로 길이를 변수에 저장해두고 필요할 때 길이 변수는 늘렸다 줄였다 하는 식으로 관리하면 됩니다.

ehgusdl0903   2년 전

@bamgoesn 님 답변 감사합니다. 

알려주신대로 수정해보았는데도 

입력) abc -> 정상출력) 5 >> 출력) 3

이런 오류가 생기네요.. 디버깅 할 수 없는 웹 컴파일러를 사용중이라, 오류를 찾기가 쉽지 않은것같습니다.

혹시 어디를 더 수정해야될지 한번더봐주실수있을까요?

bamgoesn   2년 전

아까 동작을 봤을 때 논리상의 오류도 있는 것 같았지만, 지금 코드가 예상 못할 동작을 하는 이유는 문자 배열을 다루는 방식 때문인 것 같습니다.

문자열의 끝에는 널문자가 옵니다. 하지만 이 배열을 이와 같은 방법으로 조작하게 될 경우 채워지지 않은 배열의 쓰레기 값이 남게 되므로 정의되지 않은 동작을 하는 것으로 보입니다. 저는 MinGW64 컴파일러를 사용하는데, 이 컴파일러는 배열을 선언했을 때 배열의 값을 초기화하지 않거든요. 그래서 동작이 지멋대로 튑니다. (아닐 수도 있습니다! Visual Studio 등 디버깅이 가능한 환경을 구축해서 직접 해보세요.)

또한 의도하신 걸 제가 제대로 이해했다면 S의 길이가 24행의 루프에서 계속 늘어나는데, 그러면 S_S2_len도 직접 늘려줘야 합니다.

이 이상 구체적으로는 제가 조금 바빠서 더 봐드리기가 어렵습니다.

ehgusdl0903   2년 전

@bamgoesn

충분히 이해했습니다! 시간내어 친절히 답변해주셔서 감사합니다!:)

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