URI 문제 재질문!

  • show1296
    show1296

    URI 문제 재질문합니다! 여전히 안되네요 ㅠㅠ 부탁드립니다.

    #include <iostream>
    #include <string>
    using namespace std;
    
    string translator(string inputString){
        if(inputString.find("%2") == string::npos){
            return inputString;
        }
    
        else{
            int pos =(int)inputString.find("%2");
            switch(inputString[pos+2]){
                case '0':
                    inputString.replace(pos,3," ");
                    break;
                case '1':
                    inputString.replace(pos,3,"!");
                    break;
                case '4':
                    inputString.replace(pos,3,"$");
                    break;
                case '5':
                    inputString.replace(pos,3,"%");
                    break;
                case '8':
                    inputString.replace(pos,3,"(");
                    break;
                case '9':
                    inputString.replace(pos,3,")");
                    break;
                case 'a':
                    inputString.replace(pos,3,"*");
                    break;
                default:
                    return inputString.substr(0, pos+2).append(translator(inputString.erase(0, pos+2)));
                    break;
            }
            return inputString.substr(0, pos+1).append(translator(inputString.erase(0, pos+1)));
        }
    }
    
    int main(int argc, const char * argv[]){
        int C=0;
        cin>> C;
        cin.ignore();
    
        string *inputString = new string[C];
        for(int i=0; i<C; i++){
            cin>> inputString[i];
            cin.ignore();
        }
    
        for(int i=0; i<C; i++){
            cout<<translator(inputString[i])<<endl;
        }
        delete[] inputString;
        return 0;
    }
    

    7년 전
3개의 댓글이 있습니다.
  • cosics
    cosics

    %2520을 입력하면 %20이 파싱되겠죠? 그럼 %20은 다시 " "로 파싱됩니다. 실제 원하는 출력은 %20이 되어야 하는데, 원치 않게 두 번 파싱이 되는 경우가 아닐까요? 그래서 맨 마지막에 '%' 문자를 파싱하면 될 것 같습니다. 통신 프로토콜 파싱에서도 Byte Stuffing이라는 게 있는데.. 비슷한 원리죠^^


    7년 전 link
  • Corea
    Corea

    inputString.substr과 inputString.erase를 두 문장으로 분리해보세요.


    7년 전 link
  • show1296
    show1296

    @Corea 도움이 되었습니다. 감사합니다!


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