2012-07-18 5 views
1

URL로 사용할 문자열을 준비하는 방법을 찾고 있습니다.C++ - % 20 공백 바꾸기

코드의 기본 사항은 찾고자하는 것을 입력하면 입력 한 내용과 함께 브라우저가 열립니다. C++을 배우므로 학습 프로그램입니다. 그리고 C++을 처음 접했을 때 가능한 구체적으로 설명하십시오.

cin >> s_input; 
transform(s_input.begin(), s_input.end(), s_input.begin(), tolower); 
s_input = "start http://website.com/" + s_input + "/0/7/0"; 
system(s_input.c_str()); 

하지만 사용자가 '% 20'으로 입력 한 모든 공백을 대체하기 위해 노력하고 있어요 : 여기

내가 할 노력하고 있는지. 나는 한 가지 방법을이 방법으로 찾았지만 한 번에 한 글자로만 작동하며, 전체 문자열로 문자를 배열 할 필요가 있습니다. 시도한 방법은 다음과 같습니다.

cin >> s_input; 
transform(s_input.begin(), s_input.end(), s_input.begin(), tolower); 
using std::string; 
using std::cout; 
using std::endl; 
using std::replace; 
replace(s_input.begin(), s_input.end(), ' ', '%20'); 
s_input = "start http://website.com/" + s_input + "/0/7/0"; 
system(s_input.c_str()); 

당신의 도움에 감사드립니다!

+0

실제로하려는 것은 문자열의 모든 특수 문자를 이스케이프 처리하는 것입니다. 스페이스는 URL에서 불법적 인 유일한 문자는 아닙니다. – Wug

+0

문자열의 기본 "찾기 및 바꾸기"는 [이 질문 (http://stackoverflow.com/q/3418231/501250)을 참조하십시오. 그러나 써드 파티 라이브러리를 사용하여 문자열을 올바르게 URI 인코딩하는 것을 고려해야합니다. – cdhowie

+0

@wug 당신은 그것에 대해 정확합니다. 그러나 이것은 단순히 학습 프로그램이며 한 번에 한 단계 만 수행 할 수 있습니다. 나는 이것을 사용하는 유일한 것입니다 .. – alexander7567

답변

4

/교체 : 부스트는 다음과 같이 사용할 수 있습니다, replace_all라는 하나가

std::regex space("[[:space:]]"); 
s_input = std::regex_replace(s_input, space, "%20"); 

편집 : std::regex_replace의 6 인수 버전을 사용하는 방법 :

std::regex space("[[:space:]]"); 
std::string s_output; 
std::regex_replace(s_output.begin(), s_input.begin(), s_input.end(), space, "%20"); 

문자열이제에 변경된 문자열이 포함됩니다.

대체 문자열을 std::string("%20")으로 변경해야 할 수 있습니다.

여섯 번째 인자에는 기본값이 있어야하기 때문에 5 개의 인자 만 있습니다.

+0

편집 : 또한 "# 포함"발견. – alexander7567

+0

링크를 방문하여 찾았습니다.이 메서드를 시도하고이 오류를 제공합니다. "오버로드 된 함수 std :: regex_replace의 인스턴스가 인수 목록과 일치하지 않습니다."또한 나에게 "6 개의 인수가 제공 될 것으로 기대합니다."- – alexander7567

+0

@ alexander7567 함수의 6 개 인수 버전을 사용하는 방법을 보여주는 예제가 추가되었습니다. –

0

std::replace 단일 요소와 단일 요소 (이 경우 문자를) 대체 할 만 할 수 있습니다. 단일 요소를 3으로 대체하려고합니다. 특별한 기능이 필요합니다.

당신은 비주얼 스튜디오 2010 이상이 당신이 검색 regular expressions을 사용할 수 있어야하는 경우
boost::replace_all(s_input, " ", "%20");