首页 > 解决方案 > 如果字符串向量中的单词在前面,则删除字符

问题描述

我有一个字符串向量,它们前面有不同的字符。例如:

"Hello
(Hello

我想删除第一次出现的字符。因此,如果单词之前有"or (,我希望它消失。到目前为止,我的代码是这样的。

void wash(std::vector<std::string> & data)
{
    std::string b_chars = "\"'("; //Before_chars
    std::string a_chars = "!?;,:.\"')"; //after_chars

    data.erase(std::remove_if(data.begin(), data.end(), [&b_chars](const char& c) {
        return data.find_first_of(b_chars) != std::string::npos;
    }), data.end());  
}

标签: c++

解决方案


您的情况是错误的 - 您应该确定是否c是违规字符之一,即b_chars.find(c) != std::string::npos.

要遍历整个向量,您可以:

std::for_each(data.begin(),
              data.end(),
              [&b_chars](std::string& str)
              {
                  str.erase(std::remove_if(str.begin(), 
                              str.end(), 
                              [&b_chars](const char& c) 
                                  {return b_chars.find(c) != std::string::npos;}),
               data.end());
              });
          }

但是有一个单独的字符串清洗功能而不是将自己局限于字符串向量是有意义的(我没有正确阅读您的代码,因为这是一个更有用的构建块开始):

void wash_string(std::string & s)
{
    static const std::string b_chars = "\"'("; //Before_chars
    static const std::string a_chars = "!?;,:.\"')"; //after_chars

    s.erase(std::remove_if(s.begin(), 
                           s.end(), 
                          [&b_chars](const char& c) 
                             {return b_chars.find(c) != std::string::npos;}), 
               s.end());  
}

void wash(std::vector<std::string> & data)
{
    std::for_each(data.begin(), data.end(), wash_string);
}

推荐阅读