C++解析特殊符號tab和換行符號詳情
前言:
我們經常會遇到一些Linux內核信息需要,比如一個wifi數(shù)據(jù),中間是用tab鍵盤隔開的,然后每一行用換行符進行區(qū)分,如下所示的數(shù)據(jù)

第一位置是:wifi名稱 第二個位置是:信號強度 第三個位置是:信號類型2.4Ghz或者5Ghz 第四個位置是:加密類型 第五個類型是:MAC地址
遇到這樣的數(shù)據(jù),我們比較常見的C函數(shù)解析是用while循環(huán)去匹配字符串里面的'\t'(tab鍵),'\n'(換行符號)等,然后用C標準庫里面str函數(shù),例如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信息的表,我們看到了一行有五個數(shù)據(jù),這時候打包收到了一個string類型的wifi信息。
我們應該注意三件事情:
- 我們先確認好解析的范圍,即知道最開始一位和最后一位,設置好
recivemsg.begin和recivemsg. - 進行識別tab符號和換行符號之后進行分段
- 把分好的數(shù)據(jù)塞到一個
vector容器里面,然后因為每一行都有五個數(shù)據(jù),所以我們就可以按照0~5一組的數(shù)據(jù)進行分發(fā)給各處。
實際代碼如下:
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++解析一些特殊符號tab、換行符號的文章就介紹到這了,更多相關C++解析一些特殊符號tab、換行符號內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)寢室衛(wèi)生管理系統(tǒng)
這篇文章主要為大家詳細介紹了C++實現(xiàn)寢室衛(wèi)生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
C++實現(xiàn)LeetCode(112.二叉樹的路徑和)
這篇文章主要介紹了C++實現(xiàn)LeetCode(112.二叉樹的路徑和),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-07-07

