在期间和逗号之前从字符串中删除空格

Remove spaces from string before period and comma

本文关键字:字符串 删除 空格      更新时间:2023-10-16

我可以有一个类似:

的字符串

在此期间,邦德遇到了一个令人惊叹的IRS代理商,他引诱了他。

我需要在逗号之前和整个字符串中的逗号之前删除额外的空间。我尝试将其扔进一个char矢量,只有当前字符是"而以下字符是"时,只有push_back。或",但它行不通。我知道有一种简单的方法可以使用trim(), find()erase()或某种regex,但我并不是最熟悉的言论。

解决方案可以是(使用REGEX库):

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;
}

此功能在输入字符串中获取"修复空间问题"。

在这里演示

在循环中搜索字符串",如果找到一个替换为",:

std::string str = "...";
while( true ) {
    auto pos = str.find( " ," );
    if( pos == std::string::npos )
         break;
    str.replace( pos, 2, "," );
}

对"。"做同样的事情。如果您需要处理不同的空间符号,例如TAB,请使用Regex和适当的组。

我不知道如何使用c 的正则义务为C 工作)。

您可以使用此正则:

s+(?=[,.])

REGEX DEMO

首先,无需使用char的向量:您可以通过使用std :: string。

然后,您的方法无法正常工作,因为您的副本独立于空间位置。不幸的是,您只需要删除标点周围的空间,而不是单词之间的空间。

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

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

我本可以写代码。那将是短的。但是我更喜欢让您对方法充分理解完成作业。