URI 오답의 원인이 궁금하네요

  • kortie
    kortie

    웬만하면 그냥 넘어가겠는데.. 이것 참...

    URI

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    bool str_replace(char* in, const char* x, const char* y)
    {
        char* ret = NULL;
        if(strncmp(in, x, 3)==0)
        {
            //printf("inside %s\n", in);
            strcpy(in, y);
            if(in[3]!= '\n') {
                strcpy(in+1, in+3);//(strlen(x)-strlen(y)));
            }
            return 1;
        }
        return 0;
    }
    
    void solve(char* in)
    {
        bool ret = 0;
        char* check;
        char* input = in;
        do
        {
            input = strchr(input, '%');
            if(input == NULL)
                break;
            //printf("%s\n", input);
            if(str_replace(input, "%20", " "))
                continue;
            else if(str_replace(input, "%21", "!"))
                continue;
            else if(str_replace(input, "%24", "$"))
                continue;
            else if(str_replace(input, "%25", "%"))
                continue;
            else if(str_replace(input, "%28", "("))
              continue;
            else if(str_replace(input, "%29", ")"))
                continue;
            else if(str_replace(input, "%2a", "*"))
                continue;
      }while(input++);
    
        printf("%s\n", in);
    }
    
    int main()
    {
        int testcount = 0;
        int i = 0;
        char in[81] = {0,};
    
        scanf("%d", &testcount);
        for(i = 0; i< testcount; i++)
        {
            memset(in, 0, 81);
            scanf("%s", in);
            solve(in);
            //printf("%s\n", out);
        }
        return 0;
    }
    

    9년 전
6개의 댓글이 있습니다.
  • clowcard
    clowcard

    "%252a"의 경우 결과값이 어넣게 나올지 확인해보세요 :)


    9년 전 link
  • kortie
    kortie

    결과값이 %2a 가 맞는것 아닌가요? 제가 문제를 이해를 잘 못했나...


    9년 전 link
  • Kureyo
    Kureyo

    %2a가 맞습니다


    9년 전 link
  • kortie
    kortie

    "%252a"결과값 %2a는 이상없이 잘 출력되고 있습니다. 음....


    9년 전 link
  • JongMan
    JongMan

    strcpy()에서 src와 dest를 같은 배열로 쓰시면 안됩니다:

    The  strcpy()  function copies the string pointed to by src, including
           the terminating null byte ('\0'), to the buffer pointed  to  by  dest.
           The  strings  may not overlap, and the destination string dest must be
           large enough to receive the copy.  Beware of  buffer  overruns!   (See
           BUGS.)

    9년 전 link
  • JongMan
    JongMan

    그리고 scanf()하시면 \n 문자가 배열에 안들어 가므로 if()문에도 문제가 있습니다. 물론 그것 때문에 틀린것은 아니지만요.


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