2012-07-18 89 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");