1

我正在寻找一种方法来准备用作 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());

谢谢你的帮助!

4

3 回答 3

5

如果您有 Visual Studio 2010 或更高版本,您应该能够使用正则表达式来搜索/替换:

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").

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

于 2012-07-18T05:54:13.110 回答
1

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

boost::replace_all(s_input, " ", "%20");
于 2012-07-18T04:36:41.043 回答
0

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

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

于 2012-07-18T04:14:07.080 回答