我只根据你的要求改,你的代码是……,改掉错误后结果就是……,这个结果奇怪与否我就无法置喙了
虽然 JJDownDownload 看起来应该是 JJDown\Download,但我只能认为你会在代码弄正确后自己去修改
如果你只是想用 regex_replace 去除结未尾的斜杠。在你源代码上改一下就是
程序代码:
#include <iostream>
#include <regex>
using namespace std;
int main( void )
{
string str1 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download";
string str2 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download\\";
regex re( "[\\\\]+$" );
cout << regex_replace(str1, re, "$1$2") << endl;
cout << regex_replace(str2, re, "$1$2") << endl;
}
如果你只想去除未尾的斜杠,而不要求必须使用 regex_replace,那我肯定不用会regex这种低效且晦涩的东西
程序代码:
#include <iostream>
#include <string>
using namespace std;
int main( void )
{
string str1 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download";
string str2 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download\\";
if( str1.ends_with('\\') )
str1.erase( str1.size()-1 );
if( str2.ends_with('\\') )
str2.erase( str2.size()-1 );
cout << str1 << endl;
cout << str2 << endl;
}
如果你要按照路径的规则行事,而非简单看成一个字符串即可,那使用 std::filesystem 则是必须的
程序代码:
#include <iostream>
#include <filesystem>
using namespace std;
int main( void )
{
string str1 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download";
string str2 = "C:\\Users\\Administrator\\Desktop\\JJDown\\Download\\";
auto normalized_path = []( const auto& path ) {
auto p = std::filesystem::weakly_canonical(path);
return p.has_filename() ? p.string() : p.parent_path().string();
};
cout << normalized_path(str1) << endl;
cout << normalized_path(str2) << endl;