如何在字符串中搜索和打印特定部分?

时间:2011-11-26 09:48:16

标签: c++ string search offset c++-standard-library

我主要是从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;
}

提前感谢您的帮助。如果你能帮我完成代码,我将不胜感激。

5 个答案:

答案 0 :(得分:4)

您可以从最后一个/开始从字符串中提取子字符串,但为了最有效(即,为了避免制作您想要打印的数据的不必要副本),您可以使用{{ 1}}以及string::rfind

ostream::write

如果您需要提取文件名并在以后使用,而不是立即打印,那么bert-jan'sxavier'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();