将命令行拆分为可执行文件和参数

时间:2012-09-06 16:10:44

标签: c++ string

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 );
        }
    }
}

0 个答案:

没有答案