C ++ - 用%20替换空格

时间:2012-07-18 03:57:12

标签: c++ visual-c++

我正在寻找一种准备字符串以用作URL的方法。

代码的基础是你键入你正在寻找的内容,它会打开你输入内容的浏览器。我正在学习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());

感谢您的帮助!

3 个答案:

答案 0 :(得分: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")

如你所见,我只有五个参数,那是因为第六个参数应该有一个默认值。

答案 1 :(得分:0)

如果你谷歌:C ++ UrlEncode,你会发现很多点击。这是一个:

http://www.zedwood.com/article/111/cpp-urlencode-function

答案 2 :(得分:0)

std::replace只能用单个元素替换单个元素(在本例中为字符)。您正尝试将三个元素替换为单个元素。你需要一个特殊的功能来做到这一点。 Boost有一个名为replace_all,你可以像这样使用它:

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