C++提取文件名与提取XML文件的方法详解
- 更新时间:2022-10-10 09:27:49
- 编辑:金敏才
1、提取文件名
- 查找容器内子序列的最后一次出现的位置
std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end())
- 查找容器内子序列的第一次出现的位置
std::search()
- find函数主要实现的是在容器内查找指定的元素,并且这个元素必须是基本数据类型的。查找成功返回一个指向指定元素的迭代器,查找失败返回end迭代器。
std::find()
- 返回两个迭代器之间的距离,也可以理解为计算两个元素 first 和 last 之间的元素数
std::distance(str.begin(), result)
- substr()截取字符串子序列,第一个参数为开始索引,第二参数是子序列长度
- substring() 截取字符串子序列,第一个参数为开始索引,第二参数是结束索引
-
str.substr(0, std::distance(str.begin(), result) + 1)
#include <iostream> #include <string> # include <algorithm> //注意要包含该头文件 using namespace std; std::string ExtractFileName(std::string path) { //不带后缀名的文件名 std::string fileBaseName; //文件目录 std::string str = path; //待匹配的子序列 std::string pattern = "/"; //查找容器内子序列的最后一次出现的位置,在[str.begin(),str.end ())内搜索由[pattern.begin(), pattern.end()) //组成的子序列,然后将迭代器返回到其第一个元素,即pattern.begin(),若没有发现,返回-1 // 与std::search()类似,后者返回子序列第一次出现的位置 auto result = std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end()); if (result != str.end()) { //substr()截取字符串子序列,第一个参数为开始索引,第二参数是子序列长度 //substring(截取字符串子序列,第一个参数为开始索引,第二参数是结束索引 //目录 auto dirName = str.substr(0, std::distance(str.begin(), result) + 1); //带后缀名的文件名 auto fileName = str.substr(std::distance(str.begin(), result) + 1); //不带后缀名的文件名 fileBaseName = fileName.substr(0, fileName.size() - 4); } return fileBaseName; }
2、提取XML文件
首先要引入tinyxml2的头文件,tinyxml2.h和tinyxml2.cpp
xml文件内容:
<?xml version="1.0" encoding="UTF-8"?> MD5123
声明XMLDocument变量,存放xml文件
tinyxml2::XMLDocument doc
读取xml文件
doc.LoadFile("demo.xml")
获取头节点
XMLElement *root = doc.RootElement();
头结点的兄弟节点
XMLElement *root1 = root->NextSiblingElement()
获取节点的id的属性
root1->Attribute("id");
获取节点的name的属性
head->Attribute("name")
获取节点的文本内容
root1->GetText();
获取头结点下的head节点
XMLElement *head = root->FirstChildElement("head")
#include <stdio.h> #include <iostream> #include <Windows.h> #include <string> #include "tinyxml2-master/tinyxml2.h" using namespace std; using namespace tinyxml2; void readXML() { //声明XMLDocument变量 tinyxml2::XMLDocument doc; //读取xml文件 doc.LoadFile("demo.xml"); //判断是否读取成功 if (doc.Error()) { printf("Load XML failed!"); return; } //获取头节点 XMLElement *root = doc.RootElement(); //判断头结点有没有兄弟节点 if (root->NextSiblingElement() != NULL) { //头结点的兄弟节点 XMLElement *root1 = root->NextSiblingElement(); //获取节点的id的属性 printf("第二个一级节点%s\n", root1->Attribute("id")); } if (root->GetText() != NULL) { string rootStr = root->GetText(); printf("第一个一级节点的内容%s\n", rootStr); } XMLElement *head = root->FirstChildElement("head"); //获取节点的内容 printf("head的内容%s\n", head->GetText()); printf("head的id%s\n", head->Attribute("id")); printf("head的name%s\n", head->Attribute("name")); system("pause");
总结
今天用C++实现了提取文件名与XML文件。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注码农之家的更多内容!
相关教程
-
C/C++实现双路快速排序算法原理
这篇文章主要为大家详细介绍了C/C++实现双路快速排序算法原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-04-03
-
C++中的异常处理机制详解
本文给大家分享的是C++中的异常处理机制。对如何处理异常、基本异常语法、异常保护代码等进行了探讨,推荐给大家。
发布时间:2022-04-13
-
C++中拷贝构造函数的使用
大家好,本篇文章主要讲的是C++中拷贝构造函数的使用,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
发布时间:2022-04-21
-
解析c++中参数对象与局部对象的析构顺序的详解
本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下
发布时间:2022-04-15
-
详解C++中的双冒号 ::
给网友朋友们带来一篇关于C++的教程,这篇文章主要介绍了C++中的双冒号 ::,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
发布时间:2022-09-06
-
C++ 格式化日志输出实现代码
这篇文章主要介绍了C++ 格式化日志输出实现代码,需要的朋友可以参考下
发布时间:2022-04-24
-
C/C++函数调用栈的实现方法
给网友朋友们带来一篇关于C++的教程,这篇文章主要介绍了C/C++函数调用栈的实现方法,可实现一个简单的脚本解释器,具有一定的参考借鉴价值,需要的朋友可以参考下
发布时间:2022-06-22
-
如何理解C++ 临时变量的常量性
这篇文章主要介绍了如何理解C++ 临时变量的常量性,帮助大家更好的理解和学习c++ 变量,感兴趣的朋友可以了解下
发布时间:2022-04-02