URI %2525되고, 들어오는 문자개수도 확인했습니다. 고수님들 도와주세요!! penguin [[problem:URI]] [[URI문제|problem:HELLOWORLD]] 저는 %문자를 만나면 임시로 2자리 int형 배열에 숫자를 집어넣고 16진수로 변경한 값을 char형 변수 escape에 저장하여 이를 문자로 찍어내는 방식으로 URI decoding을 구현했습니다. 제가 시험해본 예제는 다음과 같습니다. 예제 결과 %2a - %2525 %25 %25%25 %% %2528 %28 %20 %21 ! %24 $ %28 ( %29 ) 담안 검증을 위해서는 t1파일에 저장후, URI < t1로 실행하였습니다. 80자리 문자열에 대비하여 한 줄에 크기 81자가 들어올수 있도록 하였습니다. 코드는 다음과 같습니다. 언어는 c이구요 우분투 14.04LTS 입니다 #include<stdio.h> #include<stdlib.h> int main(void){ int max_strs = 0; while((max_strs < 1) || (max_strs > 100)){ scanf("%d[\n]", &max_strs); } max_strs *= 81; char *strs = (char*)malloc(sizeof(char)*max_strs); int i, j; for(i = 0; i < max_strs; i += 81){ scanf("%s[\n]", strs+i); } for(i = 0; i < max_strs; i += 81){ for(j = 0; j < 81; ++j){ if(strs[i+j] == '\0') //80자 미만의 경우를 고려하라는 break; //조 언 을 보고 추가하였지만, 여전히 if(strs[i+j] == '%'){ //오답 으로 처리됩니다 int k = 0, tmp[2]; char escape = 0; for(; k < 2; ++k) if( strs[i+j+k+1] < 58 )//9다음 tmp[k] = strs[i+j+k+1] - '0'; else if( strs[i+j+k+1] < 71 )//E tmp[k] = strs[i+j+k+1] - 55; else if( strs[i+j+k+1] < 103 )//e tmp[k] = strs[i+j+k+1] - 87; else break; escape += tmp[1] + tmp[0]*16; printf("%c", escape); j+=2; } else printf("%c", strs[i+j]); } printf("%c\n", '\0');//혹시나 해서 \0을 추가 했습니다 } } 어딘가 문제가 있는 것은 확실한데 어디가 문제인지를 잘 모르겠습니다. 고수님들 도와주세요! 10년 전
1개의 댓글이 있습니다. Being 문자열의 길이가 항상 80자인가요? 잘 생각해 보시기 바랍니다. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
penguin
[[problem:URI]]
[[URI문제|problem:HELLOWORLD]]
저는 %문자를 만나면 임시로 2자리 int형 배열에 숫자를 집어넣고
16진수로 변경한 값을 char형 변수 escape에 저장하여 이를 문자로 찍어내는
방식으로 URI decoding을 구현했습니다.
제가 시험해본 예제는 다음과 같습니다.
담안 검증을 위해서는 t1파일에 저장후,
URI < t1로 실행하였습니다.
80자리 문자열에 대비하여 한 줄에 크기 81자가 들어올수 있도록 하였습니다.
코드는 다음과 같습니다. 언어는 c이구요 우분투 14.04LTS 입니다
어딘가 문제가 있는 것은 확실한데 어디가 문제인지를 잘 모르겠습니다.
고수님들 도와주세요!
10년 전