kwak716   2년 전

문자열 입력 : Able was saw elbA 

입력한 문자열을 반대로 읽어도 같으면 회문인데요.

우선, 회문 여부만 판단하는 문제여서 입력한 문자열을 모두 대문자로 변환한 후에

입력한 문자열의 역배열을 만들고 이 두가지를 비교하는 strcmp() 함수를 사용했습니다.


해당 소스 파일에서 제가 틀린 부분은 어디일까요..?

제가 작성한 방법 말고 더 심플하고 직관적인 코드가 있으시고 알려주신다면 정말 감사드리겠습니다 ..!


독학을 하다보니 질문할 곳이 여기 사이트 외에는 없네용 ㅠㅠ 

혹시 백준 사이트 외에도 기본적인 질문과 이에 대한 피드백이 조금은 더 빠른 사이트가 있을까요..??

rhdqor213   2년 전

ABC 가 주어질때 19~20번째 줄을 거쳐서 rev_str에 저장되는 값은

rev_str[0] = 0

rev_str[1] = 'C'

rev_str[2] = 'B'

rev_str[3] = 'A'

입니다.

이것과 별개로 대문자로 변환은 왜 하는 건지 모르겠습니다.

aA 와 같은 입력은 회문이라고 볼 수 없지 않을까요?

kwak716   2년 전

문제에서 대문자를 소문자로 혹은 소문자를 대문자로 변환하여 풀라고 제시했기 때문에 다음과 같이 진행을 했습니다.

(제가 아직 기초적인 수준이라 코드를 다 작성하고자 해서요!)

피드백 주신 내용대로 19~20 줄의 코드를 다음과 같이 수정했습니다.

for (i = 0; i < length; i++,--length) {
rev_str[i] = str[length - 1];
}
rev_str[length] = NULL;

그럼에도 결과 값은 원활하게 출력이 되지를 않네요

예시)

str = "Hello"  , strlen(str) = 5 (== NULL값을 제외한 크기) ==> str[0] = H ,[1] = e, [2] = l, [3] = l, [4] = o, [5] = NULL

rev_str[0] = str[4] ==> rev_str[0] = '0'

rev_str[1] = str[3] ==> rev_str[1] = 'l'

rev_str[2] = str[2] ==> rev_str[0] = 'l'

... 등 의 값이 대입 되어 rev_str = "olleh"

이후 rev_s[5] = NULL을 대입하였는데요.


제가 문제를 접근하는 방법 자체가 조금 잘못 된걸까요?

rhdqor213   2년 전

혹시 주어지는 문자열의 최대 길이가 100인가요? 그렇다면 char 배열의 크기는 [101]로 설정해야 합니다.

djm03178   2년 전

변경하신 코드에서 length는 루프를 돈 후에 0이 된 상태입니다. 따라서 rev_str[length]가 아니라 rev_str[i]에 널 문자를 대입해야 합니다.

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