我可以有一个字符串:
在此期间,邦德遇到了一个令人震惊的美国国税局特工,他引诱了他。
我需要在逗号之前和整个字符串中的句点之前删除多余的空格。我试着把它扔进一个char矢量,如果当前的char是"那么只有push_back
。 "以下字符是"。"或","但它不起作用。我知道有一种简单的方法可以使用trim(), find()
,erase()
或某种regex
,但我不是最熟悉正则表达式。
答案 0 :(得分:1)
在循环中搜索字符串“,”,如果找到一个替换为“,”:
PShape x;
void setup(){ size(600,600,P3D); x = loadShape("x.obj");
} void draw(){
for (int i = 0; i < x.getVertexCount(); i++) { PVector v =
x.getVertex(i);
translate(width/2,height/2); shape(x,0,0); }
}
为“。”做同样的事情。如果您需要处理不同的空格符号,例如tab使用正则表达式和正确的组。
答案 1 :(得分:1)
我不知道如何在C ++中使用正则表达式,也不确定C ++是否支持PCRE正则表达式,无论如何我发布了正则表达式的答案(如果它不适用于C ++我可以删除它。)
您可以使用此正则表达式:
\s+(?=[,.])
<强> Regex demo 强>
答案 2 :(得分:1)
解决方案可能是(使用正则表达式库):
std::string fix_string(const std::string& str) {
static const std::regex rgx_pattern("\\s+(?=[\\.,])");
std::string rtn;
rtn.reserve(str.size());
std::regex_replace(std::back_insert_iterator<std::string>(rtn),
str.cbegin(),
str.cend(),
rgx_pattern,
"");
return rtn;
}
此函数接收输入字符串,并且#34;修复空格问题&#34;。
答案 3 :(得分:0)
首先,不需要使用char的向量:你可以通过使用std :: string来做同样的事情。
然后,您的方法无法正常工作,因为您的副本与空间的位置无关。不幸的是,你必须只删除标点符号周围的空格,而不是单词之间的空格。
略微修改你的代码你可以延迟等待第一个非空格值的空格副本:如果它不是标点符号你在字符前复制一个空格,否则你只需复制非空格char(因此摆脱了空格。
同样,一旦你复制了一个标点符号,只需循环并忽略以下空格,直到第一个非空格字符。
我可以编写代码。它本来会更短。但我更愿意让你完全理解这种方法完成你的作业。