我是C ++的新手。我正在尝试学习字符串替换。
我正在编写一个简短的(应该是一个教程)程序来更改目录名称。
例如,我想用“ / illumina / runs”在目录名的开头更改“ / home”:
#ifdef WINDOWS
#include <direct.h>
#define GetCurrentDir _getcwd
#else
#include <unistd.h>
#define GetCurrentDir getcwd
#endif
#include<iostream>
#include <string>
#include <regex>
#include <iterator>
using namespace std;
std::string get_current_dir() {
char buff[FILENAME_MAX]; //create string buffer to hold path
GetCurrentDir( buff, FILENAME_MAX );
string current_working_dir(buff);
return current_working_dir;
}
int main() {
string b2_dir = get_current_dir();
std::regex_replace(b2_dir, std::regex("^/home"), "/illumina/runs");
cout << b2_dir << endl;
return 0;
}
我正在跟踪http://www.cplusplus.com/reference/regex/regex_replace/中的示例,但我不明白为什么它没有改变。
如果我写的没有意义,则Perl等效为$dir =~ s/^\/home/\/illumina\/runs/
,如果这样做有助于更好地理解问题
为什么我不告诉我这段代码为什么改变了字符串?如何获取C ++来更改字符串?
答案 0 :(得分:5)
std::regex_replace
不会修改其输入参数。它产生一个新的std::string
作为返回值。参见例如此处:https://en.cppreference.com/w/cpp/regex/regex_replace(您的呼叫使用4号重载)。
这应该可以解决您的问题:
b2_dir = std::regex_replace(b2_dir, std::regex("^/home"), "/illumina/runs");