如何从字符串位置构造CString / std :: string

时间:2012-10-21 19:20:58

标签: c++ cstring stdstring

鉴于以下内容:

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:\下载\精神错乱\程序\ 7。 World.exe

此行已添加到vector<CString>

我的问题是int n = strFind.ReverseFind( '\\\' );找到第一个\的字符串pos,从字符串的结尾搜索到开头,之后构造像这样的CString CString s = CString( strFind,n );我正在构造第一个n个字符在字符串上s等于C:\Downloads\Insanity\Program但我想要的是将7 .World.exe复制到CString s而不是其他方式,我怎样才能使用{{ 1}}或CString

2 个答案:

答案 0 :(得分:3)

您是仅将std::string转换为CString仅用于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;
}

答案 1 :(得分:2)

怎么样:

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

或:

std::string s = line.substr(n+1);