gpt4 book ai didi

c++ - 没有匹配函数调用 'replace(std::basic_string::iterator, std::basic_string::iterator, char, int)' |

转载 作者:行者123 更新时间:2023-11-30 05:07:15 28 4
gpt4 key购买 nike

如何把所有的\都改成\\

我想创建地址来处理文件:

#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: no matching function for call to 'replace(std::basic_string<char>::iterator, std::basic_string<char>::iterator, char, int)'|

如何在 C++ 中使用 char 数组(没有函数)来完成这项工作?

最佳答案

您正在使用 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;
}

Live demo

但是,您说您“想要创建处理文件的地址”,这对我来说意味着您想要创建一个 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;
}

Live demo

关于c++ - 没有匹配函数调用 'replace(std::basic_string<char>::iterator, std::basic_string<char>::iterator, char, int)' |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47561739/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com