假设我有一个字符串:
argsStr = "server ('m1.labs.terad ''ata.com') username ('us ''er5') password('user)5') dbname ('def\\ault')";
Run Code Online (Sandbox Code Playgroud)
现在我使用以下代码来提取令牌:
'm1.labs.terad ''ata.com' <- token1
'us ''er5' <-token2
'user)5' <-token3
'def\ault' <-token4
Run Code Online (Sandbox Code Playgroud)
码:
regex re("(\'(.*?)\'\)");
typedef std::vector<std::string> StringVector;
StringVector arg_values;
boost::regex re_arg_values("('[^']*(?:''[^']*)*')");
boost::sregex_token_iterator name_iter_start(argsStr.begin(),argsStr.end(), re_arg_values, 0),name_iter_end;
std::copy(value_iter_start, value_iter_end,std::back_inserter(arg_values));
//putting the token in the string vector.
Run Code Online (Sandbox Code Playgroud)
将它放入字符串向量后,如何转换标记/字符串以用单引号替换双引号:
例如:
'm1.labs.terad ''ata.com' 应该成为'm1.labs.terad 'ata.com'并且
'us ''er5' 应该成为'us 'er5'.
我可以使用boost :: replace_all吗?
我在互联网上找到了这种方法:
//the call to the method:
cout << convert_binary_to_FANN_array("1001");
//the method in question:
string convert_binary_to_FANN_array(string binary_string)
{
string result = binary_string;
replace(result.begin(), result.end(), "a", "b ");
replace(result.begin(), result.end(), "d", "c ");
return result;
}
Run Code Online (Sandbox Code Playgroud)
但这给了
main.cpp:30: error: no matching function for call to ‘replace(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, const char [2], const char [3])’
Run Code Online (Sandbox Code Playgroud) 关于C++替换函数的小问题.我正在逐行解析每行文本输入.文本文件示例:
SF27_34KJ
EEE_30888
KPD324222
4230_333
Run Code Online (Sandbox Code Playgroud)
我需要删除每一行的所有下划线并用逗号替换它.当我尝试这样的事情时:
mystring.replace(mystring.begin(),mystring.end(),'_',',');
在每一行 - 而不是" SF27,34KJ "我得到95x" , "char.可能有什么不对?
我还是STL的新手,想要用ch字符串替换所有出现的字符串k.
我尝试了以下方法:
std::replace (str.begin(), str.end(), "ch", "k");
Run Code Online (Sandbox Code Playgroud)
但它抛出了这个错误:
no matching function for call to ‘replace(__gnu_cxx::__normal_iterator<char*,
std::basic_string<char, std::char_traits<char>, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, const char [2], const char [1])
Run Code Online (Sandbox Code Playgroud)
replace在这种情况下我如何开始工作?
注意:我看到了一个类似的问题但在这种情况下OP使用"blah"和'b'作为要替换的参数,但这里我的两个参数都是字符串.
问题是我不知道输入字符串的长度。如果输入字符串为“ yyyy”,则只能替换我的函数。我认为解决方案是,首先,我们将尝试将输入字符串转换回“ yyyy”,并使用我的函数完成工作。
这是我的功能:
void findAndReplaceAll(std::string & data, std::string toSearch, std::string replaceStr)
{
// Get the first occurrence
size_t pos = data.find(toSearch);
// Repeat till end is reached
while( pos != std::string::npos)
{
// Replace this occurrence of Sub String
data.replace(pos, toSearch.size(), replaceStr);
// Get the next occurrence from the current position
pos = data.find(toSearch, pos + replaceStr.size());
}
}
Run Code Online (Sandbox Code Playgroud)
我的主要功能
std::string format = "yyyyyyyyyydddd";
findAndReplaceAll(format, "yyyy", "%Y");
findAndReplaceAll(format, "dd", "%d");
Run Code Online (Sandbox Code Playgroud)
我的预期输出应为:
%Y%d
Run Code Online (Sandbox Code Playgroud) 我知道如何使用 std::replace 替换向量中的字符,如下所示:ranges::replace
我会撒谎对字符串中的子字符串做类似的事情。例如:
std::string str{"The quick brown fox jumped over the lazy dog.";
std::ranges::replace(str, "the", "a");
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
错误:与调用 '(const std::ranges::__replace_fn) (std::string&, const char [4], const char [2])' 不匹配
或者如果我使用字符串
错误:与调用 '(const std::ranges::__replace_fn) (std::string&, std::string&, std::string&)' 不匹配
它适用于字符,但不适用于子字符串。
有任何想法吗?
我已成功使用循环 andstring.find和string.replace,但想使用范围。
我正在寻找一种准备用作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());
Run Code Online (Sandbox Code Playgroud)
但是我试图用'%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());
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
c++ ×7
replace ×4
string ×4
boost ×1
c++14 ×1
c++20 ×1
std-ranges ×1
stl ×1
str-replace ×1
visual-c++ ×1