我有许多格式为#include“filename.h”的字符串我需要从所有这些字符串中提取filename.h部分。对于Instance,#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?
答案 0 :(得分:4)
也许像是,
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
编辑:已修复错误,正在添加最后一个引号
答案 1 :(得分:2)
我认为你走在正确的轨道上,但唯一的问题是你的substr
电话的第二个参数不太正确。 substr
将起始偏移量和所需子字符串的长度作为其参数。在您的情况下,您需要从第10个到第二个到最后一个字符(最后一个字符为"
)的所有内容。所以你想要一个从10开始并以line.size()-(10+1)
结束的字符串(你必须减去10,因为你先跳过它们然后再一个不包括尾随"
)。
尝试:
cout<<x.substr(10,line.size()-11)<<endl;
答案 2 :(得分:0)
“substr(10,...)”可能不是这样做的方法:)
就个人而言,我建议考虑使用“正则表达式”来取得两个引号之间的所有内容,无论引号的起点或终点位置是什么:
http://softwareramblings.com/2008/07/regular-expressions-in-c.html
答案 3 :(得分:0)
尝试使用line.length() - 1而不是line.length()