C++ 在C+;中删除字符串开头的空字符的最简单方法是什么+;?

C++ 在C+;中删除字符串开头的空字符的最简单方法是什么+;?,c++,string,C++,String,如果这是一个太基本的问题,我很抱歉。我想删除字符串开头的空格,而不删除单词之间的空格 stringstream parser(oneLine) ; double amount ; parser >> amount ; string desc ; getline(parser, desc) ; cout << "Amount: $" << amount << " Desc: " << desc &l

如果这是一个太基本的问题,我很抱歉。我想删除字符串开头的空格,而不删除单词之间的空格

stringstream parser(oneLine) ;
double amount ;
parser >> amount ;
string desc ;
getline(parser, desc) ;
cout << "Amount: $" << amount << " Desc: " << desc << endl ;
stringstream解析器(oneLine);
双倍金额;
语法分析器>>数量;
字符串描述;
getline(解析器,desc);

cout您可以通过搜索和擦除来完成:

const std::size_t pos = desc.find_first_not_of(' ');
if (pos != std::string::npos)
   desc.erase(0, pos);
但我不会;从字符串开始擦除并不是一件非常简单的事情,您实际上不需要这样做


我会将
parser.ignore(std::numeric\u limits::max(),'')放在
getline
调用之前,这样就不会首先读取空格

请注意,如果您的输入文件没有按照您所描述的格式进行格式化,这一行将继续寻找一个空间并将所有内容丢弃,直到找到一个为止:如果您认为您可能需要更灵活,那么首先是时候对整行进行
std::getline
,然后在事后将其解析为一个数量和一个描述



注意,两个解只考虑空间(u+0020)字符;如果愿意,您可以将其扩展为关注选项卡空间。第一种方法简单,第二种方法稍微复杂一些;在任何一种情况下,我都会把它作为练习留给读者。

如果输入是
10
后跟换行符,你是想读一个空白描述,还是继续读下一行描述?@François Unhelpful knecurve dupe closing,那;这里有上下文说明这不是最好的解决方案。@Asteroswithwings看到了关于dupe的第二个答案,有一个直接解决OP问题的解决方案的分解。@cigien No,这些都不适合OP的情况。@Asteroswithwings绝对不是下意识的。这个复本适合这个问题。虽然对于问题中引用的具体示例可能有更好的答案,但标题和正文都同意,主要目标是从字符串中修剪空白,这与从流中跳过空白不同。在这种情况下,示例仍然适用,因为它们生成需要修剪的字符串。如果情况并非如此,OP可以留下评论或编辑问题,以使替代意图更加明确;你建议的
parser.ignore
只忽略空格字符,而不忽略其他空格(不清楚如何将其扩展为包含所有空格)@M.M如果更清楚的话,我可以称U+0020为其他名称,尽管OP真正关心这里的制表符的可能性很小;我只是为了完成而把它包括进去,对它的支持可以作为练习留给读者。答案应该回答问题,而不是留给读者练习。。。此外,你的答案的第一部分证明结束是正确的-duplicate@M.M问题的任何部分都不涉及tabspace。我会很高兴地扩展我的答案,如果它是编辑这样做。而且,不,不是。另外,我不打算在这里讨论什么是和什么是不值得接近的堆栈溢出,所以如果这就是你来这里的目的,你最好继续。。。晚安!一个简单的
解析器>>std::ws
将使用前导空格。