C ++ 03中将命令行拆分为两个字符串的最佳方法是什么:可执行文件和参数?
例如:
"\"c:\\Program Files\\MyFile.exe\" /a /b /c" => "c:\Program Files\MyFile.exe", "/a /b /c"
"c:\\Foo\\bar.exe -t \"myfile.txt\"" => "c:\Foo\bar.exe", "-t \"myfile.txt\""
"baz.exe \"quantum conundrum\"" => "baz.exe", "\"quantum conundrum\""
一个好的解决方案应该处理引号和空格。
提升是可以接受的。
我目前的(工作)解决方案:
void split_cmd( const std::string& cmd,
std::string* executable,
std::string* parameters )
{
std::string c( cmd );
size_t exec_end;
boost::trim_all( c );
if( c[ 0 ] == '\"' )
{
exec_end = c.find_first_of( '\"', 1 );
if( std::string::npos != exec_end )
{
*executable = c.substr( 1, exec_end - 1 );
*parameters = c.substr( exec_end + 1 );
}
else
{
*executable = c.substr( 1, exec_end );
std::string().swap( *parameters );
}
}
else
{
exec_end = c.find_first_of( ' ', 0 );
if( std::string::npos != exec_end )
{
*executable = c.substr( 0, exec_end );
*parameters = c.substr( exec_end + 1 );
}
else
{
*executable = c.substr( 0, exec_end );
std::string().swap( *parameters );
}
}
}