2016-05-19 3 views
0

Я пытался извлечь только «Apple» из строки ниже, т.е. между и "/". Есть ли способ извлечь строку между разделителями? В настоящее время вся строка после «,» извлекается.C++ read select parts of std :: string

std::string test = "Hello World, Apple/Banana"; 

std::size_t found;     
found = test.find(","); 

std::string str3 = test.substr(found); 
std::cout << str3 << std::endl; 

ответ

0

Один шаг за раз. Сначала извлеките деталь после запятой. Затем извлеките часть перед следующей косой чертой.

В качестве альтернативы substr() также принимает необязательный второй параметр, максимальное количество символов для извлечения, вместо того, чтобы извлекать все, что осталось от строки. Итак, если вы вычислите, сколько символов вы хотите извлечь, вы также можете сделать это в одном вызове substr().

+1

'.find()' принимает необязательную начальную позицию. Вы можете использовать это, чтобы найти положение косой черты после запятой, а затем вычесть их для получения длины подстроки. – Barmar

0

Первая часть - это поиск, где начинается подстрока «Apple». Вы можете использовать find() для этого. Он возвращает местоположение первого символа подстроки. Затем вы можете использовать конструктор std :: string, чтобы передать исходную строку с местами старта и остановки.

Ссылки String find(), String constructor

std::string extractedString = std::string(test, test.find("Apple"), sizeof("Apple") - 1); 
0

Вы можете использовать второй аргумент substr, чтобы найти длину экстракции

#include <string> 

using namespace std; 

int main(int argc, char * argv[]){ 
    string test = "Hello World, Apple/Banana"; 
    size_t f1 = test.find(','); 
    size_t f2 = test.find('/'); 
    string extracted = test.substr(f1, f2 - f1); 
} 

Это будет выходной , Apple при использовании VC2013. Если вы измените f1 на size_t f1 = test.find(',') + 2;, он выведет Apple.