Как искать и печатать определенные части в строке? - PullRequest
1 голос
/ 26 ноября 2011

В основном я ищу стандартную функцию из библиотеки 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;
}

Заранее спасибо за вашу помощь.Пожалуйста, если вы можете помочь мне завершить код, я был бы признателен.

Ответы [ 4 ]

4 голосов
/ 26 ноября 2011

Вы можете извлечь подстроку из строки, начиная с последней /, но чтобы быть наиболее эффективным (то есть, чтобы избежать создания ненужной копии данных, которые вы хотите распечатать), вы можете использовать string::rfind кака также ostream::write:

string myFilePath = "SampleFolder/SampleFile";

size_t slashpos = myFilePath.rfind('/');

if (slashpos != string::npos) // make sure we found a '/'
    cout.write(myFilePath.data() + slashpos + 1, myFilePath.length() - slashpos);
else
    cout << myFilePath;

Если вам нужно было извлечь имя файла и использовать его позже, вместо того, чтобы просто напечатать его сразу, то Берт-Яна или Ксавье ответы были бы хорошими.

3 голосов
/ 26 ноября 2011

Попробуйте

size_t pos = myFilePath.rfind('/');
string fileName = myFilePath.substr(pos);
cout << fileName;
0 голосов
/ 26 ноября 2011

Вы можете использовать _splitpath (), см. http://msdn.microsoft.com/en-us/library/e737s6tf.aspx из MSDN.

Вы можете разделить пути на компоненты с помощью этой функции STD RTL.

0 голосов
/ 26 ноября 2011
 std::cout << std::string(myFilePath, myFilePath.rfind("/") + 1);
...