URI문제 계속 오답이 납니다. 이유가 무엇일까요

  • susul89
    susul89

    질문하시기 전에

    글을 작성하시기 전에 반드시 아래의 내용을 잘 읽어 주세요.
    다른 사람의 코드를 읽어 오류를 찾아내는 일은 쉽지 않습니다. 좋은 답변을 받기 위해서는 좋은 질문이 필요합니다.
    좋은 질문을 하려 노력하면, 종종 자신 스스로 해답을 발견하기도 합니다.

    질문에 포함되지 않아도 될 내용

    • "제 컴퓨터에서는 답이 잘 나오는데..."
    • "예제는 잘 나오는데..."
    • "넣어 본 것들은 잘 나오는데..."

    질문에 포함되어야 할 내용

    • 제목은 질문의 내용을 잘 요약해야 합니다.
    • 해결하고자 하는 문제가 무엇인지 잘 적어야 합니다.
      • 알고스팟의 문제라면, 아래의 문법 도움말을 참고하여 문제 링크를 걸어 주세요.
      • 외부의 문제라면, 문제 요약이나 URL을 제공해 주세요.
    • 문제를 어떻게 해결하려 하셨는지/해결하고 계신지 설명해 주십시오.
      • 코드만 복사해 붙여넣는 것은 설명이 아닙니다.
      • 구체적으로 알고리즘을 기술할 수 있다면 도움이 됩니다.
      • 예시를 들어 설명하는 것도 좋습니다.
    • 자신의 답안을 검증하기 위해 어떤 노력을 했는지 적어 주세요.
      • 직접 데이터를 만들어서 넣어 봤다면, 어떤 데이터를 넣었는지 적어 주세요.

    참고사항: 문법 관련

    알고스팟은 Markdown이라는 마크업 언어의 사투리를 사용하고 있습니다.
    글을 작성하시기 전에 반드시 아래 도움말을 참조하여 주세요.
    특히, 코드에 대해서는 알맞은 코드 블럭 문법을 사용하여 구문 강조가 되도록 해 주세요.

    코드 블럭 문법 예제

    코드 블럭 문법을 다음과 같이 사용하실 수 있습니다.

    #include <cstdio>
    
    int main(){
        printf("Hello world!\n");
    }
    

    문단을 구분하기 위해 앞과 뒤에 빈 줄 하나씩을 반드시 추가하셔야 합니다.


    마지막으로 자주_하는_실수_모음 페이지를 읽으시면서 혹시 해당되는 사항이 있진 않은지 생각해 보세요.

    위 내용이 지켜지지 않은 질문은 답변이 오래 걸릴 수 있습니다.

    아래 '편집하기' 버튼을 눌러 글을 쓰실 수 있습니다.

    #include <iostream>
    #include <string.h>
    
    
    using namespace std;
    
    int main()
    {
        int Count;
        cin >> Count;
    
        while (Count--)
        {
            char URI[100];
            cin >> URI;
    
            for (int i = 0; i +2< strlen(URI); i++)
            {
                if (URI[i] == '%' && URI[i + 2] == '0')
                {
                    URI[i] = ' ';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
    
                if (URI[i] == '%' && URI[i + 2] == '1')
                {
                    URI[i] = '!';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
                if (URI[i] == '%' && URI[i + 2] == '4')
                {
                    URI[i] = '$';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
                if (URI[i] == '%'  && URI[i + 2] == '5')
                {
                    URI[i] = '%';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
                if (URI[i] == '%'  && URI[i + 2] == '8')
                {
                    URI[i] = '(';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
                if (URI[i] == '%' && URI[i + 2] == '9')
                {
                    URI[i] = ')';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
                if (URI[i] == '%' && URI[i + 2] == 'a')
                {
                    URI[i] = '*';
                    for (int j = i; j < strlen(URI); j++)
                    {
                        URI[j + 1] = URI[j + 3];
                    }
                }
            }
            cout << URI<<endl;
        }
    }
    

    %와 그 뒤뒤에 숫자를 비교하여 해당 문자로 바꿔준후
    그 뒷부분을 차례로 당겨지게 하였는데요.
    %2525함정을 조심하라는 댓글을 보고 처봤는데 올바르게 나오..
    \0이 포함되지 않아서 그런건가 생각해서
    바뀌는 각 for문 끝에

    URI[strlen(URI)]='\0'
    

    을 넣어봤지만
    그래도 계속 오답이 나오네요 .


    8년 전
1개의 댓글이 있습니다.
  • JongMan
    JongMan

    %2528을 넣어보세요.


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