如何将所有\
更改为\\
?
我想创建使用文件的地址:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string str = "C:\\user\\asd";
replace(str.begin(), str.end(), '\\', '\\\\');
cout << str;
return 0;
}
我收到错误:
F:\ c ++ \ tests \ regex \ main.cpp | 8 | error:没有用于调用'replace(std :: basic_string&lt; char&gt; :: iterator,std :: basic_string&lt; char&gt; :: iterator)的匹配函数,char,int)'|
如何使用C ++中的char
数组(没有函数)来完成这项工作?
答案 0 :(得分:1)
您使用的是std::replace()
,它取代了迭代器范围内的值。在这种情况下,您正在使用std::string
中的迭代器,因此要搜索的值以及要替换它的值必须都是单char
个值。但是,'\\\\'
是一个多字节字符,因此无法用作char
值。这就是你得到编译器错误的原因。
std::string
有自己的重载replace()
方法,其中一些方法可以用多字符字符串替换std::string
的部分。
请尝试这样做,例如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "C:\\user\\asd";
string::size_type pos = 0;
while ((pos = str.find('\\', pos)) != string::npos)
{
str.replace(pos, 1, "\\\\");
pos += 2;
}
cout << str;
return 0;
}
但是,你说你&#34;想要使用地址来处理文件&#34;,这对我来说意味着你要创建一个file:
URI。如果是这样,那么你需要更像这样的东西(这是一个严重的过度简化,正确的 URI生成器会比URIs have many rules to them更复杂,但是这会让你启动):
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
const char* safe_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~!$&'()*+,;=:@/";
int main()
{
string str = "C:\\user\\ali baba";
replace(str.begin(), str.end(), '\\', '/');
string::size_type pos = 0;
while ((pos = str.find_first_not_of(safe_chars, pos)) != string::npos)
{
ostringstream oss;
oss << '%' << hex << noshowbase << uppercase << (int) str[pos];
string newvalue = oss.str();
str.replace(pos, 1, newvalue);
pos += newvalue.size();
}
str = "file:///" + str;
cout << str;
return 0;
}