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

 更新时间:2021年05月16日 10:34:47   作者:良知犹存  
这篇文章主要给大家介绍了关于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++解析特殊符号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言超细致讲解函数递归

    C语言超细致讲解函数递归

    程序调⽤⾃⾝的编程技巧称为递归 recursion)函数⾃⼰调⽤⾃⼰就是递归,你也可以理解成是⼀种嵌套结构,但递归分为俩部分,第⼀是“递”,进⼊嵌套结构。第⼆是”归“,最终会⼀步⼀步返回。第⼀次接触递归都会很懵,慢慢理解这个过程就明⽩了
    2022-05-05
  • QT定时器事件的实现示例

    QT定时器事件的实现示例

    本文介绍了QT定时器事件的概念和原理,阐述了其工作方式及实现方法,QT定时器事件可以用于在一定时间间隔内执行特定的任务,从而实现定时操作和控制,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++命名空间using namespace std是什么意思

    C++命名空间using namespace std是什么意思

    namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,下面这篇文章主要给大家介绍了关于C++命名空间using namespace std是什么意思的相关资料,需要的朋友可以参考下
    2023-01-01
  • 关于C++内存中字节对齐问题的详细介绍

    关于C++内存中字节对齐问题的详细介绍

    本篇文章是对C++内存中字节对齐的问题进行了详细的分析与总结。需要的朋友参考下
    2013-05-05
  • VC List Control控件如何删除选中的记录实例详解

    VC List Control控件如何删除选中的记录实例详解

    这篇文章主要介绍了VC List Control控件如何删除选中的记录实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • ​​C++11系列学习之Lambda表达式

    ​​C++11系列学习之Lambda表达式

    这篇文章主要介绍了​​C++11系列学习之Lambda表达式,C++11终于也引入了lambda表达式,lambda最早来源于函数式编程,现代语言慢慢都引入了这个语法,下文关于​​C++11Lambda表达式相关内容需要的小伙伴可以参考一下
    2022-04-04
  • C语言多文件编写详解

    C语言多文件编写详解

    这篇文章主要介绍了C语言多文件编写,是C语言入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09
  • C语言实现2D赛车游戏的示例代码

    C语言实现2D赛车游戏的示例代码

    此游戏是《2D 赛车》的”魔改版“——2.5D 双人赛车!原作实现了 2D 视角的赛车游戏,但是我觉得不够真实、操纵感不强,故挤出数个周末完成了这个”魔改版“,实现了第一人称的视角,希望大家喜欢
    2022-12-12
  • 浅谈C++中派生类对象的内存布局

    浅谈C++中派生类对象的内存布局

    下面小编就为大家带来一篇浅谈C++中派生类对象的内存布局。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 二叉搜索树的插入与删除(详细解析)

    二叉搜索树的插入与删除(详细解析)

    添加结点其实很容易,我们只需要找到结点所行对应的位置就可以了,而且没有要求是平衡的二叉搜索树,因此每次添加结点都是在叶子结点上操作,不需要修改二叉搜索树整体的结构
    2013-09-09

最新评论