最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++提取文件名與提取XML文件的方法詳解

 更新時間:2022年03月07日 16:15:44   作者:deepython  
這篇文章主要為大家詳細(xì)介紹了C++提取文件名與提取XML文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>

1、提取文件名

  • 查找容器內(nèi)子序列的最后一次出現(xiàn)的位置

std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end())

  • 查找容器內(nèi)子序列的第一次出現(xiàn)的位置

std::search()

  • find函數(shù)主要實(shí)現(xiàn)的是在容器內(nèi)查找指定的元素,并且這個元素必須是基本數(shù)據(jù)類型的。查找成功返回一個指向指定元素的迭代器,查找失敗返回end迭代器。

std::find()

  • 返回兩個迭代器之間的距離,也可以理解為計算兩個元素 first 和 last 之間的元素數(shù)

std::distance(str.begin(), result)

  • substr()截取字符串子序列,第一個參數(shù)為開始索引,第二參數(shù)是子序列長度
  • substring() 截取字符串子序列,第一個參數(shù)為開始索引,第二參數(shù)是結(jié)束索引
  • 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 = "/";
   //查找容器內(nèi)子序列的最后一次出現(xiàn)的位置,在[str.begin(),str.end ())內(nèi)搜索由[pattern.begin(), pattern.end())
   //組成的子序列,然后將迭代器返回到其第一個元素,即pattern.begin(),若沒有發(fā)現(xiàn),返回-1
   // 與std::search()類似,后者返回子序列第一次出現(xiàn)的位置
   auto result = std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end());
   if (result != str.end())
   {
   	//substr()截取字符串子序列,第一個參數(shù)為開始索引,第二參數(shù)是子序列長度
   	//substring(截取字符串子序列,第一個參數(shù)為開始索引,第二參數(shù)是結(jié)束索引
   	//目錄
   	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文件內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?> MD5123

聲明XMLDocument變量,存放xml文件

tinyxml2::XMLDocument doc

讀取xml文件

doc.LoadFile("demo.xml")

獲取頭節(jié)點(diǎn)

XMLElement *root = doc.RootElement();

頭結(jié)點(diǎn)的兄弟節(jié)點(diǎn)

XMLElement *root1 = root->NextSiblingElement()

獲取節(jié)點(diǎn)的id的屬性

root1->Attribute("id");

獲取節(jié)點(diǎn)的name的屬性

head->Attribute("name")

獲取節(jié)點(diǎn)的文本內(nèi)容

root1->GetText();

獲取頭結(jié)點(diǎn)下的head節(jié)點(diǎn)

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;
	}
	//獲取頭節(jié)點(diǎn)
	XMLElement *root = doc.RootElement();
//判斷頭結(jié)點(diǎn)有沒有兄弟節(jié)點(diǎn) 
	if (root->NextSiblingElement() != NULL)
	{
		//頭結(jié)點(diǎn)的兄弟節(jié)點(diǎn)
		XMLElement *root1 = root->NextSiblingElement();
		//獲取節(jié)點(diǎn)的id的屬性
		printf("第二個一級節(jié)點(diǎn)%s\n", root1->Attribute("id"));
	}
	if (root->GetText() != NULL)
	{
		string rootStr = root->GetText();
		printf("第一個一級節(jié)點(diǎn)的內(nèi)容%s\n", rootStr);
	}
	XMLElement *head = root->FirstChildElement("head");
	//獲取節(jié)點(diǎn)的內(nèi)容
	printf("head的內(nèi)容%s\n", head->GetText());
	printf("head的id%s\n", head->Attribute("id"));
	printf("head的name%s\n", head->Attribute("name"));
	system("pause");

總結(jié)

今天用C++實(shí)現(xiàn)了提取文件名與XML文件。

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!                

相關(guān)文章

  • C++實(shí)現(xiàn)高并發(fā)異步定時器

    C++實(shí)現(xiàn)高并發(fā)異步定時器

    這篇文章主要為大家詳細(xì)介紹了如何利用C++實(shí)現(xiàn)高并發(fā)異步定時器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • C++事件驅(qū)動型銀行排隊模擬

    C++事件驅(qū)動型銀行排隊模擬

    這篇文章主要為大家詳細(xì)介紹了C++事件驅(qū)動型銀行排隊模擬,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C++中std::is_object的具體使用

    C++中std::is_object的具體使用

    std::is_object是一種C++類型特性,其用途是判斷一個類型是否是一個對象類型,本文主要介紹了C++中std::is_object的具體使用,感興趣的可以了解一下
    2024-01-01
  • C語言用函數(shù)指針實(shí)現(xiàn)一個特別的計算器

    C語言用函數(shù)指針實(shí)現(xiàn)一個特別的計算器

    函數(shù)指針是一個指針變量,它可以存儲函數(shù)的地址,然后使用函數(shù)指針,下面這篇文章主要給大家介紹了關(guān)于C語言用函數(shù)指針實(shí)現(xiàn)計算器的方法,需要的朋友可以參考下
    2022-07-07
  • C++?重載運(yùn)算符在HotSpot?VM中的應(yīng)用小結(jié)

    C++?重載運(yùn)算符在HotSpot?VM中的應(yīng)用小結(jié)

    C++支持運(yùn)算符重載,對于Java開發(fā)者來說,這個可能比較陌生一些,因為Java不支持運(yùn)算符重載,下面介紹一下HotSpot?VM中的運(yùn)算符重載,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • C++新特性詳細(xì)分析基于范圍的for循環(huán)

    C++新特性詳細(xì)分析基于范圍的for循環(huán)

    C++11這次的更新帶來了令很多C++程序員期待已久的for?range循環(huán),每次看到j(luò)avascript,?lua里的for?range,心想要是C++能有多好,心里別提多酸了。這次C++11不負(fù)眾望,再也不用羨慕別家人的for?range了。下面看下C++11的for循環(huán)的新用法
    2022-04-04
  • C++ seekg函數(shù)用法案例詳解

    C++ seekg函數(shù)用法案例詳解

    這篇文章主要介紹了C++ seekg函數(shù)用法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++設(shè)置超時時間的簡單實(shí)現(xiàn)方法

    C++設(shè)置超時時間的簡單實(shí)現(xiàn)方法

    這篇文章主要介紹了C++設(shè)置超時時間的簡單實(shí)現(xiàn)方法,涉及系統(tǒng)函數(shù)setsockopt對套接口的操作,具有一定的實(shí)用價值,需要的朋友可以參考下
    2014-10-10
  • 淺析VC++中的頭文件包含問題

    淺析VC++中的頭文件包含問題

    類中盡量采用指針或引用方式調(diào)用其它類,這樣就可以只聲明class xxx了。并且這也符合資源最優(yōu)利用,更利于使用多態(tài)
    2013-09-09
  • 更優(yōu)雅的C++字符串格式化實(shí)現(xiàn)方法詳解

    更優(yōu)雅的C++字符串格式化實(shí)現(xiàn)方法詳解

    在用C++編寫代碼時,經(jīng)常需要用到字符串拼接及格式化,尤其是在拼寫sql語句時。所以本文為大家介紹了更優(yōu)雅的C++字符串格式化實(shí)現(xiàn)方法,希望對大家有所幫助
    2023-04-04

最新評論

麻阳| 股票| 安陆市| 白山市| 长兴县| 镇沅| 乌兰县| 玛纳斯县| 通许县| 米泉市| 昌吉市| 商洛市| 奉贤区| 陆良县| 三台县| 龙岩市| 六安市| 剑河县| 西乌珠穆沁旗| 阳原县| 北海市| 英吉沙县| 宜都市| 潜江市| 库尔勒市| 丰镇市| 开封县| 五台县| 岫岩| 库伦旗| 延边| 论坛| 龙南县| 富顺县| 南昌市| 饶阳县| 连南| 民乐县| 木里| 错那县| 江安县|