在句点和逗号之前删除字符串中的空格

时间:2016-12-02 17:11:33

标签: c++ regex string

我可以有一个字符串:

  

在此期间,邦德遇到了一个令人震惊的美国国税局特工,他引诱了他。

我需要在逗号之前和整个字符串中的句点之前删除多余的空格。我试着把它扔进一个char矢量,如果当前的char是"那么只有push_back。 "以下字符是"。"或","但它不起作用。我知道有一种简单的方法可以使用trim(), find()erase()或某种regex,但我不是最熟悉正则表达式。

4 个答案:

答案 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;。

Here a demo

答案 3 :(得分:0)

首先,不需要使用char的向量:你可以通过使用std :: string来做同样的事情。

然后,您的方法无法正常工作,因为您的副本与空间的位置无关。不幸的是,你必须只删除标点符号周围的空格,而不是单词之间的空格。

略微修改你的代码你可以延迟等待第一个非空格值的空格副本:如果它不是标点符号你在字符前复制一个空格,否则你只需复制非空格char(因此摆脱了空格。

同样,一旦你复制了一个标点符号,只需循环并忽略以下空格,直到第一个非空格字符。

我可以编写代码。它本来会更短。但我更愿意让你完全理解这种方法完成你的作业。