⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringprocess.c

📁 一个基于SAX分析方法的XML文档解析函数包
💻 C
字号:
#include "StringProcess.h"
#include <stdlib.h>
#include <string.h>

PXML_String CreateXML_String()
{
	PXML_String pXmlString = malloc(sizeof(XML_String));
	if(pXmlString == NULL) return NULL;

	pXmlString->data = malloc((STR_LENGTH + 1)*sizeof(XML_Char));
	if(pXmlString == NULL) return NULL;

	pXmlString->capacity = STR_LENGTH;
	pXmlString->length = 0;
	pXmlString->data[0] = '\0';

	return pXmlString;
}
//
void FreeXML_String(PXML_String pXmlString)
{
	if(pXmlString) free(pXmlString->data);
	free(pXmlString);
}
//
enum XML_STR_PRO_Error XML_StrCat(PXML_String target, const XML_Char* source, int length)
{
	XML_Char* buffer = NULL;;

	if(!target || !source) return MEM_OUT;
	if(target->capacity - target->length > length){
		if(! target->length) STRCPY(target->data, source);
		else STRCAT(target->data, source);
	}else{
		buffer = malloc((target->capacity + length + 1)*sizeof(XML_Char));
		if(!buffer) return MEM_OUT;

		STRCPY(buffer, target->data);
		STRCAT(buffer, source);
		free(target->data);
		target->data = buffer;
	}
	target->length += length;

	return STRING_SUCCESS;
}

enum XML_STR_PRO_Error XML_StrStrCat(PXML_String target, const PXML_String source)
{
	return XML_StrCat(target, source->data, source->length);
}

enum XML_STR_PRO_Error XML_StrPCharCat(PXML_String target, const XML_Char* source)
{
	return XML_StrCat(target, source, STRLEN(source));
}

/**Compare two variables with type of XML_String
return value as STRCMP(char *, char *)
*/
int XML_StrPCharCmp(const PXML_String xmlStr, const XML_Char* str)
{
	return STRCMP(xmlStr->data, str);
}

/**Compare the reference of XML_String type with the second reference of char* type  
return value as STRCMP(char *, char *)
*/
int XML_StrCmp(const PXML_String xmlStr1, const PXML_String xmlStr2)
{
	return STRCMP(xmlStr1->data, xmlStr2->data);
}

/**
Make the variable passed in referrence with size 0
*/
void XML_ClearStr(PXML_String str)
{
	if(str == NULL || str->capacity == 0){
		str = CreateXML_String();
		return;
	} 
	str->length = 0;
	str->data[0] = '\0';
}

/**
Add a single XML_Char in str.
*/
enum XML_STR_PRO_Error XML_AddXMLChar(PXML_String str, const XML_Char character)
{
	if(!str) return INVALID_STR;
	if(str->length < str->capacity){
		str->data[str->length] = character;
		str->length++;
		str->data[str->length] = '\0';
		return STRING_SUCCESS;
	}else{
		XML_Char* buff = malloc((str->capacity)*sizeof(XML_Char) + (STR_LENGTH + 1)*sizeof(XML_Char) );
		if(!buff) return MEM_OUT;
		STRCPY(buff, str->data);		
		free(str->data);		
		str->data = buff;
		str->capacity = str->capacity + STR_LENGTH;		
	    str->data[str->length] = character;
	    str->length++;
		str->data[str->length] = '\0';
	    return STRING_SUCCESS;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -