Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ string equivalent for strrchr

Tags:

c++

std

Using C strings I would write the following code to get the file name from a file path:

#include <string.h>

const char* filePath = "dir1\\dir2\\filename"; // example
// extract file name (including extension)
const char* fileName = strrchr(progPath, '\\');
if (fileName)
  ++fileName;
else
  fileName = filePath;

How to do the same with C++ strings? (i.e. using std::string from #include <string>)

like image 842
coproc Avatar asked Jan 11 '23 09:01

coproc


1 Answers

The closest equivalent is rfind:

#include <string>

std::string filePath = "dir1\\dir2\\filename"; // example
// extract file name (including extension)
std::string::size_type filePos = filePath.rfind('\\');
if (filePos != std::string::npos)
  ++filePos;
else
  filePos = 0;
std::string fileName = filePath.substr(filePos);

Note that rfind returns an index into the string (or npos), not a pointer.

like image 190
ecatmur Avatar answered Jan 18 '23 14:01

ecatmur