2016-06-10 3 views
0

Я хочу разделить «строку» (разделитель \), чтобы получить последнее вхождение. This код, который я написал:Как получить последний strtok?

char str[] ="D:\\Google Drive\\My Files\\Test.zip"; 
char * buffer = str; 

sprintf(buffer, "%s", strtok(str,"\\")); 
cout << buffer; 

но он возвращает D: вместо Test.zip (первое появление, не последний). Как бы вы справились с этой задачей?

Мне нужно использовать/держать sprintf (например, форматировать строку).

+1

Почему вы даже используете строки C и C API в том, что предположительно является программой на C++? Почему бы не написать правильный код на C++, например, 'std :: string'? –

ответ

4

Использования strrchr вместо - это более уместно в данном контексте, и как неразрушающие и возвратный тоже:

char str[] ="D:\\Google Drive\\My Files\\Test.zip"; 
char * buffer = strrchr(str, '\\'); 
cout << buffer + 1; 

Если вы действительно должны держать избыточное и неэффективное использование sprintf согласно вашему вопросу, то вы, конечно, можете это сделать:

char str[] ="D:\\Google Drive\\My Files\\Test.zip"; 
char buffer[256]; 
sprintf(buffer, "%s", strrchr(str, '\\') + 1); 
cout << buffer; 

LIVE DEMO

+0

Извините. Но мне нужно использовать/держать sprintf (т. Е. Форматировать строку). – markzzz

+0

Ну, это кажется глупым - но я сделаю его менее эффективным для вас, если это то, что вам нужно. –

+0

Это потому, что я фактически использую контейнер WDL_string https://github.com/olilarkin/wdl-ol/blob/master/WDL/wdlstring.h. И я могу установить/добавить строку, используя «строку формата». В этом контейнере нет функции .Split. – markzzz

Смежные вопросы