C++解析一些特殊符号Tab、换行符号

前言:

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

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比临汾网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式临汾网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖临汾地区。费用合理售后完善,10多年实体公司更值得信赖。

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

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

 
 
 
 
  1. int i, j ; 
  2.  i = 0; 
  3.  j = strlen(strIn) - 1; 
  4.  while(strIn[i] == ' ' || strIn[i] == '\t') 
  5.          ++i; 
  6.  
  7.  while(strIn[j] == ' ' || strIn[j] == '\t') 
  8.          --j; 
  9.  strncpy(strOut, strIn + i , j - i + 1); 

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

解析代码

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

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

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

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

实际C++代码如下:

 
 
 
 
  1. vector Parse_Wifi_List(string& msg) 
  2.         vector words; 
  3.         if(msg.empty()) 
  4.             return words; 
  5.         string::iterator temp_p = msg.begin(); 
  6.         string sepword; 
  7.         bool bit_true = false; 
  8.         while(temp_p != msg.end()) 
  9.         { 
  10.             if(/* * temp_p == ' ' || */  * temp_p == '\t' || * temp_p == '\n') 
  11.             { 
  12.                 if(bit_true) 
  13.                 { 
  14.                     words.push_back(sepword); 
  15.                     PP_INFO("seword :%s",sepword.c_str()); 
  16.                     sepword.clear(); 
  17.                 }    
  18.                 bit_true = false; 
  19.                 temp_p++; 
  20.                 continue; 
  21.             } 
  22.             else 
  23.             { 
  24.                 bit_true = true; 
  25.                 sepword += *temp_p; 
  26.             } 
  27.             if(*temp_p ++ == '\0') 
  28.             { 
  29.                 break; 
  30.             } 
  31.             // else 
  32.             // { 
  33.             //  PP_INFO("%d %d %c",msg.end(),*temp_p,*temp_p); 
  34.             // } 
  35.         } 
  36.         // for(auto point : words) 
  37.         // { 
  38.         //  printf(".%s\n",point.c_str()); 
  39.         // } 
  40.       //for(uint16_t i =0;i
  41.       //{ 
  42.         // printf("[]%s,%s\n",words[i].c_str(),words[i+1].c_str(),words[i+3].c_str()); 
  43.         //} 
  44.         return words; 
  45.     } 

使用此代码解析LOG如下:

结语

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

本文转载自微信公众号「羽林君」,可以通过以下二维码关注。转载本文请联系羽林君公众号。

作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

分享文章:C++解析一些特殊符号Tab、换行符号
标题链接:http://www.hantingmc.com/qtweb/news24/21874.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联