Как создать CString / std :: string из позиции строки

Учитывая следующее:

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 вот так CString s = CString( strFind,n ); Я строю первые п символов в строке так s равно C:\Downloads\Insanity\Program но я хочу скопировать 7 .World.exe к CString s а не иначе, как я могу сделать это с помощью CString или же std::string?

0

Решение

Вы конвертируете 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;
}
3

Другие решения

Как насчет:

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

или же:

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