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. 世界.exe

此行添加到vector<CString>.

我的问题是int n = strFind.ReverseFind( '\\\' );找到第一个 \ 的字符串 pos 从字符串的末尾搜索到开头,在构造像这样的 CString 之后,CString s = CString( strFind,n );我正在构造字符串上的 FIRST n 个字符,所以s是相等的C:\Downloads\Insanity\Program,但我想要的是复制7 .World.exe到 CStrings而不是其他方式,我该如何使用CStringor来做到这一点std::string

4

2 回答 2

3

您是否将其转换std::stringCString仅用于ReverseFind功能?如果是这样,您可以std::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 回答