0

次の場合:

for( std::string line; getline( input, line ); )
{
        CString strFind = line.c_str();
        int n = strFind.ReverseFind( '\\' );

        CString s = CString( strFind,n );

        cout << s << endl;
      // m_Path.push_back( line.c_str() );  
}

.ini構成を読み取っていて、この.iniに次の行があります。

C:\ Downloads \ Insanity \ Program\7。World.exe

この行がに追加されvector<CString>ます。

私の問題はint n = strFind.ReverseFind( '\\\' );、文字列の最後から最初まで検索する最初の\の文字列posを見つけるCString s = CString( strFind,n );ことです。このようにCStringを構築するとき、文字列の最初のn文字を構築しているのでs、等しいC:\Downloads\Insanity\Programですが、コピーしたいのは7 .World.exeCStringにs、そしてその逆ではありませんが、またはを使用してそれを行うにはどうすればよいですCStringstd::string

4

2 に答える 2

3

機能のためだけにを変換しstd::stringていますか? その場合は、代わりに使用できます。CStringReverseFindstd::basic_string::find_last_of

#include <iostream>
#include <string>

int main()
{
  std::string s(R"(C:\Downloads\Insanity\Program\7. World.exe)");

  auto pos = s.find_last_of( '\\' ) + 1; //advance to one beyond the backslash
  std::string filename( s, pos );
  std::cout << filename << std::endl;
}
于 2012-10-21T19:48:47.387 に答える
2

どうですか:

CString s = strFind.Mid(n+1);

また:

std::string s = line.substr(n+1);
于 2012-10-21T19:28:25.140 に答える