亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2022年03月07日 16:15:44   作者:deepython  
這篇文章主要為大家詳細(xì)介紹了C++提取文件名與提取XML文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<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)查找指定的元素,并且這個(gè)元素必須是基本數(shù)據(jù)類型的。查找成功返回一個(gè)指向指定元素的迭代器,查找失敗返回end迭代器。

std::find()

  • 返回兩個(gè)迭代器之間的距離,也可以理解為計(jì)算兩個(gè)元素 first 和 last 之間的元素?cái)?shù)

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

  • substr()截取字符串子序列,第一個(gè)參數(shù)為開始索引,第二參數(shù)是子序列長(zhǎng)度
  • substring() 截取字符串子序列,第一個(gè)參數(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())
   //組成的子序列,然后將迭代器返回到其第一個(gè)元素,即pattern.begin(),若沒(méi)有發(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()截取字符串子序列,第一個(gè)參數(shù)為開始索引,第二參數(shù)是子序列長(zhǎng)度
   	//substring(截取字符串子序列,第一個(gè)參數(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)有沒(méi)有兄弟節(jié)點(diǎn) 
	if (root->NextSiblingElement() != NULL)
	{
		//頭結(jié)點(diǎn)的兄弟節(jié)點(diǎn)
		XMLElement *root1 = root->NextSiblingElement();
		//獲取節(jié)點(diǎn)的id的屬性
		printf("第二個(gè)一級(jí)節(jié)點(diǎn)%s\n", root1->Attribute("id"));
	}
	if (root->GetText() != NULL)
	{
		string rootStr = root->GetText();
		printf("第一個(gè)一級(jí)節(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文件。

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

相關(guān)文章

  • C++編譯期循環(huán)獲取變量類型詳情

    C++編譯期循環(huán)獲取變量類型詳情

    這篇文章主要介紹了C++編譯期循環(huán)獲取變量類型詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 簡(jiǎn)介C/C++預(yù)處理器的一些工作

    簡(jiǎn)介C/C++預(yù)處理器的一些工作

    這篇文章主要介紹了C/C++預(yù)處理器的一些工作,有助于理解編譯器底層的工作流程,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言實(shí)現(xiàn)輸入一個(gè)字符串后打印出該字符串中字符的所有排列

    C語(yǔ)言實(shí)現(xiàn)輸入一個(gè)字符串后打印出該字符串中字符的所有排列

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入一個(gè)字符串后打印出該字符串中字符的所有排列的方法,是數(shù)學(xué)中非常實(shí)用的排列算法,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言結(jié)課設(shè)計(jì)之計(jì)算器功能

    C語(yǔ)言結(jié)課設(shè)計(jì)之計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言結(jié)課設(shè)計(jì)之計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++ using namespace std 用法深入解析

    C++ using namespace std 用法深入解析

    以下是對(duì)C++中using namespace std的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-07-07
  • C++ std::bind用法詳解

    C++ std::bind用法詳解

    這篇文章主要介紹了C++ std::bind用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++變量判定的螺旋法則示例詳解

    C++變量判定的螺旋法則示例詳解

    這篇文章主要給大家介紹了關(guān)于C++變量判定的螺旋法則,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C++中的編譯與鏈接

    C++中的編譯與鏈接

    這篇文章主要介紹了C++中的編譯與鏈接,編譯型語(yǔ)言SHI?c++最大的優(yōu)點(diǎn),相比于Python這種解釋型語(yǔ)言,C++在編譯階段就進(jìn)行了許多處理,在執(zhí)行階段便具有高效性,下面我們就來(lái)詳細(xì)講解該內(nèi)容吧
    2021-12-12
  • C++虛繼承的實(shí)現(xiàn)原理由內(nèi)存布局開始講起

    C++虛繼承的實(shí)現(xiàn)原理由內(nèi)存布局開始講起

    為了解決多繼承時(shí)的命名沖突和冗余數(shù)據(jù)問(wèn)題,C++提出了虛繼承,使得在派生類中只保留一份間接基類的成員,下面我們從內(nèi)存布局看看虛繼承的實(shí)現(xiàn)原理
    2022-06-06
  • C++ 中的this指針詳解及實(shí)例

    C++ 中的this指針詳解及實(shí)例

    這篇文章主要介紹了C++ 中的this指針詳解及實(shí)例的相關(guān)資料,this指針是類的一個(gè)自動(dòng)生成、自動(dòng)隱蔽的私有成員,它存在于類的非靜態(tài)成員中,指向被調(diào)用函數(shù)所在的對(duì)象。需要的朋友可以參考下
    2017-07-07

最新評(píng)論