如何搜索和删除字符串中的字符

时间:2019-05-29 05:46:06

标签: c++ string

我正在尝试将.fsp文件转换为字符串,但是新的.fsp文件非常异常。它包含一些我要从字符串中删除的不良字符。我该怎么做?

我试图在字符串中搜索char并将其删除,但我不知道该怎么做。

字符串如下:

string s;

s = 144˙037˙412˙864;

我需要像这样

s = 144037412864;

所以我除了这样的结果

string s = 144037412864;

谢谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我们可以使用删除擦除习惯用法从字符串中删除不必要的字符! <algorithm>中有一个名为remove_if的函数。 remove_if的作用是删除与某些谓词匹配的元素。 remove_if返回一个迭代器,该迭代器在删除所有元素之后指向容器的新端。我将向您展示如何编写完成此功能的函数!

#include <algorithm>
#include <string>

void erase_ticks(std::string& s) {
    // Returns true for characters that should be removed
    auto condition = [](char c) { return c == '`'; }; 

    // Removes characters that match the condition, 
    // and returns the new endpoint of the string
    auto new_end = std::remove_if(s.begin(), s.end(), condition); 

    // Erases characters from the new endpoint to the current endpoint
    s.erase(new_end, s.end()); 
}

我们可以在main中使用它,并且它按预期运行!

#include <iostream>

int main() {
    std::string s("123`456`789"); 
    std::cout << s << '\n'; // prints 123`456`789
    erase_ticks(s);
    std::cout << s << '\n'; // prints 123456789
}

答案 1 :(得分:2)

此问题包括两个部分,首先,我们需要识别字符串中不需要的任何字符。从您的用例看来,所有非数字的东西都需要处理。这很简单,因为标准库定义了一个函数std :: isdigit(只需添加以下包含“ #include <locale>”),该函数接受一个字符并返回一个布尔值,该布尔值指示该字符是否为数字。

第二,我们需要一种方法来快速,干净地从字符串中删除所有出现的字符串。因此,我们可以使用“删除删除”惯用法来遍历字符串并执行我们想要的操作。

string s = "123'4'5";
s.erase(std::remove_if(s.begin(), s.end(), [](char x)->bool {return !std::isdigit(x);}), s.end()); 

在上面的代码段中,我们调用带有两个迭代器的字符串的擦除,第一个指的是我们要开始从中删除的位置,第二个指的是该呼叫中要删除到的位置。实际上,此技巧的魔力在于对remove_if的调用(为此包括“ #include <algorithm>”)。 remove_if实际上是通过将字符串的元素(或字符)向前移到字符串的末尾来工作的。

因此,“ 123'4'5'”变为“ 12345'''”,然后它返回一个迭代器,将这些字符移至此位置,然后传递给擦除以告诉它删除从此处开始的字符。最后,我们只剩下“ 12345”。

编辑:忘了提一下,remove_if在这里也使用了一个谓词,我使用的是一个lambda,它带有一个字符并返回布尔值。