我正在尝试将.fsp文件转换为字符串,但是新的.fsp文件非常异常。它包含一些我要从字符串中删除的不良字符。我该怎么做?
我试图在字符串中搜索char并将其删除,但我不知道该怎么做。
字符串如下:
string s;
s = 144˙037˙412˙864;
我需要像这样
s = 144037412864;
所以我除了这样的结果
string s = 144037412864;
谢谢您的帮助。
答案 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,它带有一个字符并返回布尔值。