我主要是从C ++库中寻找一个标准函数,它可以帮助我在字符串中搜索字符,然后从找到的字符开始打印出其余的字符串。我有以下情况:
#include <string>
using std::string;
int main()
{
string myFilePath = "SampleFolder/SampleFile";
// 1. Search inside the string for the '/' character.
// 2. Then print everything after that character till the end of the string.
// The Objective is: Print the file name. (i.e. SampleFile).
return 0;
}
提前感谢您的帮助。如果你能帮我完成代码,我将不胜感激。
答案 0 :(得分:4)
您可以从最后一个/
开始从字符串中提取子字符串,但为了最有效(即,为了避免制作您想要打印的数据的不必要副本),您可以使用{{ 1}}以及string::rfind
:
ostream::write
如果您需要提取文件名并在以后使用,而不是立即打印,那么bert-jan's或xavier's答案就会很好。
答案 1 :(得分:3)
尝试
size_t pos = myFilePath.rfind('/');
string fileName = myFilePath.substr(pos);
cout << fileName;
答案 2 :(得分:0)
std::cout << std::string(myFilePath, myFilePath.rfind("/") + 1);
答案 3 :(得分:0)
您可以使用_splitpath()查看http://msdn.microsoft.com/en-us/library/e737s6tf.aspx表单MSDN。
您可以使用此STD RTL功能将路径拆分为组件。
答案 4 :(得分:0)
基于此行描述了您的问题的目标:
// The Objective is: Print the file name. (i.e. SampleFile).
您可以使用std :: filesystem很好地完成它:
#include <filesystem>
namespace fs = std::experimental::filesystem;
fs::path myFilePath("SampleFolder/SampleFile");
fs::path filename = myFilePath.filename();
如果您只需要不带扩展名的文件名:
#include <filesystem>
namespace fs = std::experimental::filesystem;
myFilePath("SampleFolder/SampleFile");
fs::path filename = myFilePath.stem();