C++解析特殊符號(hào)tab、換行符號(hào)實(shí)例代碼
前言:
我們經(jīng)常會(huì)遇到一些Linux內(nèi)核信息需要,比如一個(gè)wifi數(shù)據(jù),中間是用tab鍵盤(pán)隔開(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信息。
第一件事情,我們先確認(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í)際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如下:
結(jié)語(yǔ)
這就是我分享的一個(gè)簡(jiǎn)單的C++解析一些特殊符號(hào)的實(shí)踐,如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。
到此這篇關(guān)于C++解析特殊符號(hào)tab、換行符號(hào)的文章就介紹到這了,更多相關(guān)C++解析特殊符號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用C++17實(shí)現(xiàn)JSON庫(kù)設(shè)計(jì)思路示例全解
這篇文章主要為大家介紹了使用C++17實(shí)現(xiàn)JSON庫(kù)設(shè)計(jì)思路示例全解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08C++ OpenCV實(shí)現(xiàn)與添加椒鹽噪聲和高斯噪音
圖像噪聲是圖像在獲取或是傳輸過(guò)程中受到隨機(jī)信號(hào)干擾,妨礙人們對(duì)圖像理解及分析處理的信號(hào),本文為大家整理了C++結(jié)合OpenCV為圖像添加椒鹽噪聲和高斯噪音的代碼,需要的可以收藏一下2023-09-09Dashboard Interface 應(yīng)用實(shí)現(xiàn)操作
Dashboard Server Remote Control Interface是一個(gè)關(guān)鍵的功能,它為用戶提供了通過(guò)TCP/IP協(xié)議遠(yuǎn)程控制機(jī)器人的能力,執(zhí)行包括開(kāi)關(guān)機(jī)、加載程序、檢查機(jī)器人狀態(tài)以及設(shè)置機(jī)器人操作模式等多種操作,本文介紹Dashboard Interface 應(yīng)用操作,感興趣的朋友跟隨小編一起看看吧2024-08-08基于Matlab實(shí)現(xiàn)有雪花飄落的圣誕樹(shù)的繪制
圣誕節(jié)快到了(雖然還有十天),一起來(lái)用MATLAB畫(huà)個(gè)簡(jiǎn)單圣誕樹(shù)叭~代碼幾乎取消了全部的循環(huán),因此至少需要17b之后的版本,僅存的循環(huán)用來(lái)讓樹(shù)旋轉(zhuǎn)起來(lái),讓雪花飄落起來(lái),讓樹(shù)頂上的星光搖曳起來(lái)~感興趣的可以試一試2022-12-12C語(yǔ)言文件操作函數(shù)freopen詳細(xì)解析
替換一個(gè)流,或者說(shuō)重新分配文件指針,實(shí)現(xiàn)重定向。如果stream流已經(jīng)打開(kāi),則先關(guān)閉該流。如果該流已經(jīng)定向,則freopen將會(huì)清除該定向。此函數(shù)一般用于將一個(gè)指定的文件打開(kāi)一個(gè)預(yù)定義的流:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出或者標(biāo)準(zhǔn)出錯(cuò)2013-10-10C++11之std::future對(duì)象的使用以及說(shuō)明
這篇文章主要介紹了C++11之std::future對(duì)象的使用以及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02C++實(shí)現(xiàn)團(tuán)購(gòu)訂單管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)團(tuán)購(gòu)訂單管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-12-12