我正在写一个Arduino一个程序,它在信息一类的NMEA格式从存储在一个List <String>的.txt文件读取。我需要删除以某些前缀($ GPZDA,$ GPGSA,$ GPGSV)开头的字符串,因为它们对我来说是无用的,因此,我只需要$ GPRMC和$ GPGGA即可,其中包含一个基本的时间戳记,而且位置全在我身上无论如何都在使用。我希望使用尽可能少的外部库(SPRINT,BOOST),因为DUE并没有那么多的空间。
我真正需要的是一种从LIST < STRING >中删除不是以特定前缀开头的行的方法,有什么想法吗?
我当前使用的方法似乎已用一个特定的字符串替换了整个输出,但文件的长度/大小保持不变(分别为1676和2270),这些输出是使用两个While语句实现的,该语句将两个输入文件放入列表< STRING >
以下是我要使用的内容的一个小片段,该内容应按正确的顺序对文件进行排序(工作中,它们按其数值当前排列,这在当前是第二个字段中有效)字符串),但是“ .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();
}
谢谢
如果我理解正确,并且您想要某种前缀白名单。您可以使用remove_if
来寻找他们,并使用一个小功能,以检查是否前缀拟合的一个(使用mismatch
像这里),例如:
#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;
}
(演示)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句