C++ C++;-将空格替换为%20

C++ C++;-将空格替换为%20,c++,visual-c++,C++,Visual C++,我正在寻找一种方法来准备一个字符串用作URL 代码的基础是你输入你要找的东西,它会打开一个包含你输入内容的浏览器。我正在学习C++,所以这是一个学习程序。请尽可能具体,我是新的C++。< /P> 以下是我试图做的: cin >> s_input; transform(s_input.begin(), s_input.end(), s_input.begin(), tolower); s_input = "start http://website.com/" + s_input + "

我正在寻找一种方法来准备一个字符串用作URL

代码的基础是你输入你要找的东西,它会打开一个包含你输入内容的浏览器。我正在学习C++,所以这是一个学习程序。请尽可能具体,我是新的C++。< /P> 以下是我试图做的:

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());

谢谢你的帮助

< P>如果你谷歌:C++ UrlEncode,你会发现很多点击。这里有一个:


std::replace
只能用单个元素替换单个元素(本例中为字符)。您试图用三个元素替换单个元素。您将需要一个特殊的函数来实现这一点。Boost有一个叫做,你可以这样使用它:

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

std::replace
只能将单个元素(本例中为字符)替换为单个元素。您试图用三个元素替换单个元素。您将需要一个特殊的函数来实现这一点。Boost有一个叫做,你可以这样使用它:

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

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

std::regex space("[[:space:]]");
s_input = std::regex_replace(s_input, space, "%20");
编辑:如何使用的六参数版本:

字符串
s\u输出现在包含更改的字符串

您可能必须将替换字符串更改为
std::string(“%20”)


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

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

std::regex space("[[:space:]]");
s_input = std::regex_replace(s_input, space, "%20");
编辑:如何使用的六参数版本:

字符串
s\u输出现在包含更改的字符串

您可能必须将替换字符串更改为
std::string(“%20”)


正如您所看到的,我只有五个参数,这是因为第六个参数应该有一个默认值。

您实际要做的是转义字符串中的所有特殊字符。空格不是URL中唯一非法的字符。有关字符串的基本“查找和替换”,请参阅。但是,您应该考虑使用第三方库来正确地对URI进行编码。但这只是一个学习计划,我一次只能走一步。我将是唯一一个使用这个的..你实际上要做的是转义字符串中的所有特殊字符。空格不是URL中唯一非法的字符。有关字符串的基本“查找和替换”,请参阅。但是,您应该考虑使用第三方库来正确地对URI进行编码。但这只是一个学习计划,我一次只能走一步。我将是唯一一个使用此..编辑:发现您还必须“#包含”。通过访问linkOK发现了这一点,我尝试了这个方法,它给了我这个错误:“没有重载函数std::regex_replace的实例与参数列表匹配”,它还给了我“期望6个参数-提供3个”@alexander7567添加了显示如何使用该函数的6个参数版本的示例。谢谢!这就是我要找的!编辑:发现您还必须“#包括”。通过访问linkOK发现了这一点,我尝试了这个方法,它给了我这个错误:“没有重载函数std::regex_replace的实例与参数列表匹配”,它还给了我“期望6个参数-提供3个”@alexander7567添加了显示如何使用该函数的6个参数版本的示例。谢谢!这就是我要找的!