ENCRYPT 문제 관련 질문드립니다

  • hyuk0512
    hyuk0512

    ENCRYPT

    간략히 문제를 요약하면,
    문자열을 입력 받아 짝수번째 문자 먼저 출력하고, 홀수번째 문자를 이어서 출력하는
    문제입니다.

    일단 성능 생각안하고,
    아래와 같이 단순하게 루프 두번 돌면서
    짝수번째 문자 출력시키고, 홀수번째 문자 차례대로 출력하도록 짜놨는데
    오답처리가 되었네요;;

    오답 원인 확인 부탁드려도 될까요?
    (100자 넘는 문자열에 대해서 따로 예외처리를 포함하지는 않았습니다)

    #include

    int testN;
    char input[120];
    int main(void)
    {
    int i;
    int idx;
    scanf ("%d", &testN);
    for (i = 0; i < testN; i++)
    {
    scanf ("%s", input);

    for (idx = 0; idx < 120; idx++ )
        {
            if ((idx%2) == 1)
                continue;
            if (!input[idx])
                break;
    
            printf ("%c", input[idx]);
    
        }
    
        for (idx = 0; idx < 120; idx++ )
        {
            if ((idx%2) == 0)
                continue;
            if (!input[idx])
            {
                printf ("\n");
                break;
            }
    
            printf ("%c", input[idx]);
    
        }
    
    
    }
    return 0;

    }


    9년 전
3개의 댓글이 있습니다.
  • 일루
    일루

    c++ string은 \0이 나오면 끝나지만, 그 이후의 값이 뭐가 들어있는가는 undefined 입니다. 이걸 힌트삼아서 고쳐보심이...


    9년 전 link
  • hyuk0512
    hyuk0512

    흠...문자열 받기 전에 memset을 통해 초기화 하니까 정답처리가 되었네요;; 감사합니다!! 혹시 표준입출력만으로(stdio.h) memset 없이 초기화 하는 방법이 있을까요?


    9년 전 link
  • hyuk0512
    hyuk0512

    각 루프에서 index 체크를 2개씩 건너 뛰면서 하다보니 \0를 발견 못하고 이전에 입력 받았던 문자를 확인하는 경우가 생겼네요;; 초기화 대신에 각 루프에서 \0 여부 먼저 확인하도록 수정하니 memset 없이도 정상 결과 출력 하는 것 같습니다.


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.