Обрезка строк в C ++ - PullRequest
       1

Обрезка строк в C ++

3 голосов
/ 04 февраля 2012

У меня есть несколько строк в формате #include "filename.h". Мне нужно вытащить часть filename.h из всех этих строк. Например, #include "apple.h" #include "mango.h" #include "Strawberry.h".

     getline(Myfile,str1);   //str1 now contains a line from a text file i.e #include "Strawberry.h"
     std::cout <<"\t\t"<<str1.substr(10,(line.length())) <<std::endl;

Выход: Strawberry.h "

Как мне избавиться от "в конце концов и просто получить apple.h или Strawberry.h?

Ответы [ 4 ]

4 голосов
/ 04 февраля 2012

Может быть что-то вроде,

string::size_type beg = str1.find_first_of("\""); //find first quotation mark
string::size_type end = str1.find_first_of("\"", beg + 1); //find next quotation mark
string result = str1.substr( beg + 1 , end - (beg + 1) ); //return the portion in between

РЕДАКТИРОВАТЬ: исправлена ​​ошибка, добавлял последнюю кавычку

2 голосов
/ 04 февраля 2012

Я думаю, что вы на правильном пути, но единственная проблема в том, что второй аргумент вашего вызова substr не совсем верен. substr принимает в качестве аргументов начальное смещение и длину нужной подстроки. В вашем случае вы хотите все, начиная с 10-го и до второго до последнего символа (последний символ "). Таким образом, вы хотите строку, начинающуюся с 10 и заканчивающуюся line.size()-(10+1) (вам нужно вычесть 10, потому что вы сначала пропускаете их, а затем еще одну, чтобы не включать в себя завершающий ").

Попробуйте:

cout<<x.substr(10,line.size()-11)<<endl;
0 голосов
/ 04 февраля 2012

Попробуйте line.length () - 1 вместо line.length ()

0 голосов
/ 04 февраля 2012

"substr (10, ...)", возможно, не способ сделать это:)

Лично я бы рекомендовал использовать "регулярное выражение", чтобы все между двумя кавычками,независимо от того, какова начальная или конечная позиция любой кавычки:

http://softwareramblings.com/2008/07/regular-expressions-in-c.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...