URI 문제에서...

  • leed
    leed

    ##우선 다음과 같이 했는데 안풀려서
    ##힌트좀 얻고자 글을 올립니다.

    경우의 수를 int 변수로 받고
    input을 new string[case1]로 받았습니다.
    그 뒤 순차적으로 문자열을 입력 받고
    여기까진 기본이니 그렇다 치고...

    1. find() 함수로 '%'로 위치를 찾아서
    2. 위치값이 0보다 크고 문자열보다 작은 조건 하에
    3. copy() 함수를 통해서 문자열을 20,2a 등의 2자리 값을 받아서
    4. strtol() 함수를 통해 hex 값으로 변경시켰습니다.
    5. erase() 함수로 아까 찾은 위치에서 2자리만 지우고
    6. hex값에 따라 switch 문으로 특정 char형 값을 그 자리에 대입시켰습니다.
    7. 그뒤 다시 find() 함수로 % 위치를 찾아 루프를 돌립니다.
    int finder = input[i].find('%');
    while ( 조건 ) {
        char encode[4];
        input[i].copy(encode,2,finder+1);
    
        char **ptr;
        int encode_num = strtol(encode,ptr,16);
    
        char decode;
        switch( encode_num )
        {
      case 0x20: decode=' '; break;
      ...(생략)
        }
        input[i].erase(finder,2);
        input[i][finder]=decode;
        finder = input[i].find('%');
    }
    

    부디 저의 부족함을 알려주세요 ㅠ


    12년 전
6개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan

    다음 입력을 넣어보세요~

    %2525
    

    이 경우 %25가 나와야합니다.


    12년 전 link
  • leed
    leed

    감사합니다. 그런 예외를 제가 처리할 수가 없었군요.
    그걸 풀려고 쉽게 생각해서 finder를 저장해두고
    똑같은 위치를 가리키면 break 걸도록 했는데...
    오답이네요 실제로 %25%28%25%25를 하니 되지가 않네요;;


    12년 전 link
  • leed
    leed

    LIBe // 정말 감사드립니다. 참고에 힘입어서 결국엔 풀었습니다.
    오늘 처음와서 풀어보는데 상당히 신경쓸 부분이 많네요 ^^;;


    12년 전 link
  • hyunhwan
    hyunhwan

    축하합니다~ 예전에 이 문제가 알고스팟 대회에 나왔었는데, 많은 분들이 이 부분에서 눈물을 흘리셨던 기억이 새록새록 나네요. 소스코드를 확인하니 위의 방법을 수정하셔서 통과를 하셨는데, 다음의 링크도 참고해보시는게 좋을 것 같습니다.

    http://algospot.com/forum/read/585/


    12년 전 link
  • Taeyoon_Lee
    Taeyoon_Lee

    링크를 클릭해보니, Children's가...


    12년 전 link
  • leed
    leed

    LIBe // 링크...를 따라 들어가봤는데
    C를 통해서 이렇게 간단하게 짤 수 있다는게 놀라울 다름이네요
    C가 배울 게 방대하다는 것에 한 번 더 놀랐습니다.


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