从List中删除字符串的特定格式?

时间:2014-08-15 10:20:41

标签: c++ arduino

我正在为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();
    }

由于

1 个答案:

答案 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