用C ++修剪字符串

时间:2012-02-04 04:47:07

标签: c++ string

我有许多格式为#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?

4 个答案:

答案 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()