我正在为Arduino编写程序,该程序以种 NMEA 格式获取信息,该格式是从存储在List<中的.txt文件中读取的。字符串>。我需要删除以某些前缀($ GPZDA,$ GPGSA,$ GPGSV)开头的字符串,因为这对我来说没用,因此我只需要$ GPRMC和$ GPGGA,其中包含基本时间戳和所有I&的位置#39; m无论如何都在使用。我希望尽可能少地使用外部库(SPRINT,BOOST),因为DUE没有足够的空间。
我真正需要的是一种从LIST中删除行的方法< STRING >这不是以特定的前缀开头的,任何想法?
我目前使用的方法似乎已经用一个特定的字符串替换了整个输出,但保持文件长度/大小相同(分别为1676和2270),这些输出是使用两个While语句实现的将两个输入文件放入List< STRING >
下面是我试图使用的一小段内容,它应该将文件排序为正确的顺序(工作时,它们的数值按当前顺序排列,适用于时间,这是字符串中的第二个字段)然而" .unique();"似乎已经采取了每个" Unique"价值并用它取代所有其他所以现在我有一个1676行列表基本上是1,1,1,2,2,2,3,3,4 ... 1676 ???
while (std::getline(GPS1,STRLINE1)){
ListOne.push_back("GPS1: " + STRLINE1 + "\n");
ListOne.sort();
ListOne.unique();
std::cout << ListOne.back() << std::endl;
GPSO1 << ListOne.back();
}
由于
答案 0 :(得分:0)
如果我理解正确,你想要一些白色的前缀列表。
您可以使用remove_if
查找它们,并使用小函数检查其中一个前缀是否适合(例如mismatch
使用here):
#include <iostream>
#include <algorithm>
#include <string>
#include <list>
using namespace std;
int main() {
list<string> l = {"aab", "aac", "abb", "123", "aaw", "wws"};
list<string> whiteList = {"aa", "ab"};
auto end = remove_if(l.begin(), l.end(), [&whiteList](string item)
{
for(auto &s : whiteList)
{
auto res = mismatch(s.begin(), s.end(), item.begin());
if (res.first == s.end()){
return false; //found allowed prefix
}
}
return true;
});
for (auto it = l.begin(); it != end; ++it){
cout<< *it << endl;
}
return 0;
}
(demo)