2014-11-14 4 views
0

У меня есть FilePath, который может иметь как/и \ и нескольких из них, напримеррасщепления в Visual C++

\\ а/тр \ record.csv

или

\ \ ре/NST/OPR \ и т.д./некоторые/ноябрю \

Я хотел бы получить первые 2 его части (ABC и TR в первом примере, и вновь и NST во втором)

Как может Я делаю это в ual C++? (windows) С регулярными выражениями или некоторой функцией msdn? Может быть, есть функция msdn для нормализации пути к файлу для всех \ или всех/и только одного из них? (Я не могу использовать дополнительные библиотеки, например boost)

ответ

0

Я думаю, вы можете просто «разобрать» строку в цикле, если вы уверены, что вам когда-либо понадобится встреча \ и/как разделитель путей. Да, вы можете использовать регулярное выражение или что-то более сложное, но это довольно простая проблема.

Что-то вроде этого - примечание, код не тестировался, и, скорее всего, не будет компилироваться, но было бы проиллюстрировать алгоритм:

std::string::citerator beg = path.cbegin(); 
std::string::citerator end = path.cend(); 
unsigned separator_count = 0; 
while(beg != end && separator_count < 4) 
{ 
    if (*beg == '/' || *beg == '\\') 
    ++separator_count; 
    ++beg; 
} 

std::string extracted_path = (separator_count == 3) 
    ? path.substr(path.cbegin(), std::distance(path.cbegin(), beg)) 
    : std::string(); 
Смежные вопросы