c++

字符串的拷贝与比较

c++

Posted by YiMiTuMi on January 24, 2022

字符串拷贝宏

用于string向char的转换。

定义

#define USSE_NORMAL_LEN (64)
#define EFFmin(a, b)  (((a) < (b)) ? (a) : (b)) 

string To char

#define SAFE_COPY(x,y) \
	if((x) != NULL && (y)!=NULL)\
{\
	memset(x,0,sizeof(x));\
	strncpy(x,y,EFFmin((sizeof(x) -1), strlen(y)));\
}

wstring To wchat_t

#define SAFE_COPY_W(x,y) \
	if((x) != NULL && (y)!=NULL)\
{\
	memset(x,0,sizeof(x));\
	wcsncpy(x,y,EFFmin((sizeof(x) -1)/sizeof(wchar_t), wcslen(y)));\
}

例:

MFC:

CString strValue;
char szValue;
wchar_t szWValue;

SAFE_COPY(szValue, CW2A(strValue.GetString()));
SAFE_COPY_W(szWValue, strValue.GetString());

C++:

wstring strValue;
char szValue;
wchar_t szWValue;

SAFE_COPY(szValue, CW2A(strValue.c_str()));
SAFE_COPY_W(szWValue, strValue.c_str());

字符串通配符判断

使用*和?这些通配符来代替一些字符我们要判断通配符。

/*************************** Function ***********************************
* 函 数 名:wildcmp
* 函数功能:通配符判断
* 参数说明:接受2个字符串
* 返 回 值:相同返回TRUE,否则FALSE
**********************************************************************/

CHAR版本

int wildcmp(const char *wild, const char *string) 
{
	const char *cp = NULL, *mp = NULL;

	while ((*string) && (*wild != '*')) 
	{
		if ((*wild != *string) && (*wild != '?')) 
		{
			return 0;
		}
		wild++;
		string++;
	}

	while (*string) 
	{
		if (*wild == '*') 
		{
			if (!*++wild) 
			{
				return 1;
			}
			mp = wild;
			cp = string+1;
		} 
		else if ((*wild == *string) || (*wild == '?')) 
		{
			wild++;
			string++;
		} 
		else 
		{
			wild = mp;
			string = cp++;
		}
	}

	while (*wild == '*') 
	{
		wild++;
	}
	return !*wild;
}

WCHAR版本

int wildcmpW(const WCHAR *wild, const WCHAR *string)
{
	const WCHAR *cp = NULL, *mp = NULL;

	while ((*string) && (*wild != L'*')) 
	{
		if ((*wild != *string) && (*wild != L'?')) 
		{
			return 0;
		}
		wild++;
		string++;
	}

	while (*string) 
	{
		if (*wild == L'*')
		{
			if (!*++wild) 
			{
				return 1;
			}
			mp = wild;
			cp = string+1;
		} 
		else if ((*wild == *string) || (*wild == L'?')) 
		{
			wild++;
			string++;
		} 
		else 
		{
			wild = mp;
			string = cp++;
		}
	}

	while (*wild == L'*') 
	{
		wild++;
	}
	return !*wild;
}

蓝色妖姬 – 相守