2012-07-18 99 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 2012-07-18 03:59:58

+0

有關字符串的基本「查找和替換」,請參閱[此問題](http://stackoverflow.com/q/3418231/501250)。但是您應該考慮使用第三方庫來正確地對字符串進行URI編碼。 – cdhowie 2012-07-18 04:01:27

+0

@wug你是對的。但這只是一個學習計劃,我只能一次完成一步。我將是唯一使用這個.. – alexander7567 2012-07-18 04:01:57

回答

4

如果你有Visual Studio 2010中或更高版本,你應該能夠使用regular expressions查找/替換:

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

編輯:如何使用的std::regex_replace六個參數版本:

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

字符串s_output現在包含更改的字符串。

您可能必須將替換字符串更改爲std::string("%20")

正如你所看到的,我只有五個參數,那是因爲第六個應該有一個默認值。

+0

編輯:發現你也必須「#包括」。通過訪問鏈接找到這個 – alexander7567 2012-07-18 20:15:58

+0

好吧,我試過這個方法,它給了我這個錯誤:「沒有重載函數std :: regex_replace實例匹配參數列表」,它也給我「期望6個參數 - 3提供」 – alexander7567 2012-07-18 20:44:36

+0

@ alexander7567添加了顯示如何使用函數的六參數版本的示例。 – 2012-07-19 05:41:11

0

std::replace是唯一能夠取代單元素(在這種情況下個字符)單元素。您試圖用三個元素替換單個元素。你將需要一個特殊的功能來做到這一點。升壓有一個,叫replace_all,你可以使用它像這樣:

boost::replace_all(s_input, " ", "%20");