C++解析特殊符号tab、换行符号实例代码

前言:

我们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据

第一位置是:wifi名称 第二个位置是:信号强度 第三个位置是:信号类型2.4Ghz或者5Ghz 第四个位置是:加密类型 第五个类型是:MAC地址

遇到这样的数据,我们比较常见的C函数解析是用while循环去匹配字符串里面的'\t'(tab键),'\n'(换行符号)等,然后用C标准库里面str函数,例如strncpy进行复制或者strstr去查找,类似于下面所示:

    int i, j ;
    i = 0;
    j = strlen(strIn) - 1;
    while(strIn[i] == ' ' || strIn[i] == '\t')
            ++i;

    while(strIn[j] == ' ' || strIn[j] == '\t')
            --j;
    strncpy(strOut, strIn + i , j - i + 1);

那么我们怎么用C++解析呢,最近刚好解析了部分wifi信息,所以给大家分享哈这部分。

解析代码

对应上面的wifi信息的表,我们看到了一行有五个数据,这时候打包收到了一个string类型的wifi信息。

第一件事情,我们先确认好解析的范围,即知道最开始一位和最后一位,设置好recivemsg.begin 和 recivemsg.

第二件事情,进行识别tab符号和换行符号之后进行分段

第三件事情,把分好的数据塞到一个vector容器里面,然后因为每一行都有五个数据,所以我们就可以按照0~5一组的数据进行分发给各处。

实际C++代码如下:

vector<string> Parse_Wifi_List(string& msg)
{
        vector<string> words;
        if(msg.empty())
            return words;
        string::iterator temp_p = msg.begin();
        string sepword;
        bool bit_true = false;
        while(temp_p != msg.end())
        {
            if(/* * temp_p == ' ' || */  * temp_p == '\t' || * temp_p == '\n')
            {
                if(bit_true)
                {
                    words.push_back(sepword);
                    PP_INFO("seword :%s",sepword.c_str());
                    sepword.clear();
                }
                bit_true = false;
                temp_p++;
                continue;
            }
            else
            {
                bit_true = true;
                sepword += *temp_p;
            }
            if(*temp_p ++ == '\0')
            {
                break;
            }
            // else
            // {
            //  PP_INFO("%d %d %c",msg.end(),*temp_p,*temp_p);
            // }
        }
        // for(auto point : words)
        // {
        //  printf(".%s\n",point.c_str());
        // }
      //for(uint16_t i =0;i<words.size();i+=5)
      //{
        // printf("[]%s,%s\n",words[i].c_str(),words[i+1].c_str(),words[i+3].c_str());
        //}
        return words;
    }

使用此代码解析LOG如下:

结语

这就是我分享的一个简单的C++解析一些特殊符号的实践,如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。

到此这篇关于C++解析特殊符号tab、换行符号的文章就介绍到这了,更多相关C++解析特殊符号内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++符号优先级(详细整理)

    Precedence Operator Description Example Associativity 1 ()[]->.::++-- Grouping operatorArray accessMember access from a pointerMember access from an objectScoping operatorPost-incrementPost-decrement (a + b) / 4;array[4] = 2;ptr->age = 34;obj.age =

  • C++ 处理中文符号实例详解

    C++ 处理中文符号 英文符号替换为英文逗号 processPunctuation(string& tag) { std::set<char> punctuation_set; punctuation_set.insert(' '); punctuation_set.insert('\t'); punctuation_set.insert(';'); for (int i=0; i< tag.size(); i++) { if (punctuation_set.find(tag[

  • C++ Primer中&、*符号的多重定义与int *p和int* p的区别讲解

    & 和*这样的符号,既能用作表达式里的运算符,也能作为声明的一部分出现,符号的上下文决定了符号的意义: int i = 42; int &r = i; //&紧随类型名出现,因此是声明的一部分,r是一个引用 int *p; //*紧随类型名出现,因此是声明的一部分,p是一个指针p p = &i; //&出现在表达式中,是一个取地址符 *p = i; //*出现在表达式中,是一个解引用符 int &r2 = *p; //&是声明的一部分,*是一个解引用

  • C++无法重载点符号、::、sizeof等的原因

    大多数的运算符能够被程序员重载.例外的是:     . (点符号) :: ?: sizeof 并没有什么根本的原因要禁止重载?:.仅仅是因为,我没有发现有哪种特殊的情况需要重载一个三元运算符.注意一个重载了 表达式1?表达式2:表达式3 的函数,不能够保证表达式2:表达式3 中只有一个会被执行. Sizeof 不能够被重载是因为内建的操作(built-in operations),诸如对一个指向数组的指针进行增量操作,必须依靠它.考虑一下: X a[10]; X* p = &a[3]; X* q

  • JavaScript tab选项卡插件实例代码

    今天,先从最简单的开始,将已有的一个Tab选项卡切换功能改写成javascript插件形式. 原生函数写法 将一个javascript方法改写为js插件最简单的方式就是将这个方法挂载到window全局对象下面 我们先来看看最原始的使用函数写法的代码: tab.html <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta http

  • Python处理文本换行符实例代码

    本文研究的主要是Python处理文本换行符的相关内容,具体如下. 源文件每行后面都有回车,所以用下面输出时,中间会多了一行 try: with open("F:\\hjt.txt" ) as f : for line in f: print(line) except FileNotFoundError: print("读取文件出错") 有两种方法处理: 1.print后面带 end='',表示不换行 try: with open("F:\\hjt.txt&

  • 基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码

    1.   测试环境 JQuery-3.2.1.min.j Bootstrap-3.3.7-dist win7 1.2.   实践 HTML代码片段 <div class="container-fluid"> <div class="row"> <!--添加左侧菜单栏 --> <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2"> <div class

  • Python解析JSON数据的基本方法实例代码

    目录 一.JSON数据格式介绍 二.Python处理JSON数据 json.dumps json.loads 语法 总结 一.JSON数据格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON建构于两种结构:json是Javascript中的对象和数组中的对象,本质上来讲就是有特定结构的字符串,所以可以通过这两种结构可以表示各种复杂的结构: 1 对象: 对象在js中表示为”{}”括起来的内容,数据结构为{key:value, key:v

  • VC实现将网址解析出所有ip地址的实例代码

    通过调用gethostbyname 系统函数进行解析 void GetHostNamebyIp(char* hostName) { if(NULL == hostName) { return; } int WSA_return = 0; WSADATA WSAData; HOSTENT *host_entry; char szIP[1024] = {0}; AfxMessageBox(hostName); WSA_return=WSAStartup(0x0202,&WSAData); if(0

  • C++解析特殊符号tab、换行符号实例代码

    前言: 我们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据 第一位置是:wifi名称 第二个位置是:信号强度 第三个位置是:信号类型2.4Ghz或者5Ghz 第四个位置是:加密类型 第五个类型是:MAC地址 遇到这样的数据,我们比较常见的C函数解析是用while循环去匹配字符串里面的'\t'(tab键),'\n'(换行符号)等,然后用C标准库里面str函数,例如strncpy进行复制或者strstr去查找,类似于下

  • C++解析特殊符号tab和换行符号详情

    目录 前言: 我们经常会遇到一些Linux内核信息需要,比如一个wifi数据,中间是用tab键盘隔开的,然后每一行用换行符进行区分,如下所示的数据 第一位置是:wifi名称 第二个位置是:信号强度 第三个位置是:信号类型2.4Ghz或者5Ghz 第四个位置是:加密类型 第五个类型是:MAC地址 遇到这样的数据,我们比较常见的C函数解析是用while循环去匹配字符串里面的'\t'(tab键),'\n'(换行符号)等,然后用C标准库里面str函数,例如strncpy进行复制或者strstr去查找,类

  • python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import time, random, sys class Counter: def __init__(self): self.lock = threading.Lock() self.value = 0 def increment(self): self.lock.acquire() self.value = v

  • JS实现用特殊符号替换字符串的中间部分区域的实例代码

    一.引入 相信很多人都遇到过敏感信息需要做部分隐藏功能,大多数都是用特殊符号去替换. 正好今天我又遇到这样的前端显示的需求,正好把相关JS记录下来,方便下次再用. 二.JS部分 /* 部分隐藏处理 ** str 需要处理的字符串 ** frontLen 保留的前几位 ** endLen 保留的后几位 ** cha 替换的字符串 */ function plusXing(str, frontLen, endLen,cha) { var len = str.length - frontLen - e

  • Java解析xml文件遇到特殊符号异常的情况(处理方案)

    在一次Java解析xml文件的开发过程中,使用SAX解析时,出现了这样一个异常信息: Error on line 60 of document : 对实体 "xxx" 的引用必须以 ';' 分隔符结尾; 我打开xml文件后,发现该"xxx"符号之前跟着一个"&"符号,后来了解到,这类符号在xml里属于一种特殊符号,而特殊符号若没用转义符表示,直接用到xml文件里,就会在使用SAX等方式做解析时出现奇怪的异常. 其实,这都是因为这些特殊字符

随机推荐