Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否从列表中删除字符串的特定格式?_C++_Arduino - Fatal编程技术网

C++ 是否从列表中删除字符串的特定格式?

C++ 是否从列表中删除字符串的特定格式?,c++,arduino,C++,Arduino,我正在为Arduino编写一个程序,它以一种NMEA格式获取信息,该格式是从存储在列表中的.txt文件读取的。我需要去掉以某些前缀$GPZDA、$GPGSA、$GPGSV开头的字符串,因为它们对我来说是无用的,因此我只需要$GPRMC和$GPGGA,它们包含一个基本的时间戳和我正在使用的所有位置。我希望使用尽可能少的外部库SPRINT、BOOST,因为DUE没有足够的空间 我真正需要的是从列表中删除不以特定前缀开头的行的方法,有什么想法吗 我目前使用的方法似乎用一个特定的字符串替换了整个输出,但

我正在为Arduino编写一个程序,它以一种NMEA格式获取信息,该格式是从存储在列表中的.txt文件读取的。我需要去掉以某些前缀$GPZDA、$GPGSA、$GPGSV开头的字符串,因为它们对我来说是无用的,因此我只需要$GPRMC和$GPGGA,它们包含一个基本的时间戳和我正在使用的所有位置。我希望使用尽可能少的外部库SPRINT、BOOST,因为DUE没有足够的空间

我真正需要的是从列表中删除不以特定前缀开头的行的方法,有什么想法吗

我目前使用的方法似乎用一个特定的字符串替换了整个输出,但文件长度/大小分别保持在1676和2270,这些输出是使用两个While语句实现的,它们将两个输入文件放入列表中

下面是我试图使用的一个小片段,它应该按照正确的顺序对文件进行排序,它们是按其数值排序的,在字符串中的第二个字段时间段内运行良好;似乎已经取得了每个唯一的值,并用它替换了所有其他值,所以现在我有一个1676行的列表,基本上是1,1,1,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();
    }

如果我理解正确的话,谢谢你,你想要一些前缀的白名单。 您可以使用查找它们,并使用一个小函数检查其中一个前缀是否匹配,例如:

#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;
}

太好了,现在我只需要从文本文件中读取它。谢谢你,伙计。