C++解析特殊符號(hào)tab和換行符號(hào)詳情
前言:
我們經(jīng)常會(huì)遇到一些Linux內(nèi)核信息需要,比如一個(gè)wifi數(shù)據(jù),中間是用tab鍵盤隔開(kāi)的,然后每一行用換行符進(jìn)行區(qū)分,如下所示的數(shù)據(jù)
第一位置是:wifi名稱 第二個(gè)位置是:信號(hào)強(qiáng)度 第三個(gè)位置是:信號(hào)類型2.4Ghz或者5Ghz 第四個(gè)位置是:加密類型 第五個(gè)類型是:MAC地址
遇到這樣的數(shù)據(jù),我們比較常見(jiàn)的C函數(shù)解析是用while
循環(huán)去匹配字符串里面的'\t'(tab鍵),'\n'(換行符號(hào))等,然后用C標(biāo)準(zhǔn)庫(kù)里面str函數(shù),例如strncpy
進(jìn)行復(fù)制或者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信息,所以給大家分享哈這部分。
解析代碼:
對(duì)應(yīng)上面的wifi
信息的表,我們看到了一行有五個(gè)數(shù)據(jù),這時(shí)候打包收到了一個(gè)string
類型的wifi
信息。
我們應(yīng)該注意三件事情:
- 我們先確認(rèn)好解析的范圍,即知道最開(kāi)始一位和最后一位,設(shè)置好
recivemsg.begin
和recivemsg.
- 進(jìn)行識(shí)別tab符號(hào)和換行符號(hào)之后進(jìn)行分段
- 把分好的數(shù)據(jù)塞到一個(gè)
vector
容器里面,然后因?yàn)槊恳恍卸加形鍌€(gè)數(shù)據(jù),所以我們就可以按照0~5一組的數(shù)據(jù)進(jìn)行分發(fā)給各處。
實(shí)際代碼如下:
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如下:
到此這篇關(guān)于C++解析一些特殊符號(hào)tab、換行符號(hào)的文章就介紹到這了,更多相關(guān)C++解析一些特殊符號(hào)tab、換行符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解
當(dāng)自旋鎖嘗試獲取鎖時(shí)以忙等待(busy waiting)的形式不斷地循環(huán)檢查鎖是否可用,下面這篇文章主要給大家介紹了關(guān)于利用C++11原子量如何實(shí)現(xiàn)自旋鎖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-06-06基于一致性hash算法 C++語(yǔ)言的實(shí)現(xiàn)詳解
在《基于一致性hash算法(consistent hashing)的使用詳解》一文中已經(jīng)介紹了一致性hash的基本原理,本文將會(huì)對(duì)其具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行描述,并用c++語(yǔ)言對(duì)一致性hash進(jìn)行了簡(jiǎn)單的實(shí)現(xiàn)2013-05-05C++?TCP網(wǎng)絡(luò)編程詳細(xì)講解
TCP/IP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,它會(huì)保證數(shù)據(jù)不丟包、不亂序。TCP全名是Transmission?Control?Protocol,它是位于網(wǎng)絡(luò)OSI模型中的第四層2022-09-09深度剖析C++對(duì)象池自動(dòng)回收技術(shù)實(shí)現(xiàn)
今天小編就為大家分享一篇關(guān)于深度剖析C++對(duì)象池自動(dòng)回收技術(shù)實(shí)現(xiàn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03C++實(shí)現(xiàn)LeetCode(112.二叉樹(shù)的路徑和)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(112.二叉樹(shù)的路徑和),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言數(shù)組實(shí)現(xiàn)掃雷游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)組實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06