c++ Windows编程 字符串

#include <iostream>
#include<cstdlib>
#include<windows.h>
#include<StrSafe.h>

using namespace std;
/*
多字符(MultiChar)也就是ANSI编码的方式,而宽字符(WideChar)也就是Unicode编码的方式
WCHAR Unicode字符
PWSTR 指向Unicode字符串的指针
PCWSTR 指向一个恒定的Unicode字符串的指针
对应的ANSI数据类型为CHAR,LPSTR和LPCSTR。
ANSI/Unicode通用数据类型为TCHAR,PTSTR,LPCTSTR。

如何判断一个文本文件是ANSI还是Unicode?
判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。
*/


/*
功能:拼接两个字符串
StringCchCatW(
STRSAFE_LPWSTR pszDest,//目标字符串,不能定义STRSAFE_LPWSTR,要定义为wchar_t[]类型,因为cchDest用到的_countof(array)必须是数组
size_t cchDest,//目标缓存大小
STRSAFE_LPCWSTR pszSrc)//源缓存字符串


这些函数的EX版本多了三个参数:size_t * pcchRemaining 返回目标缓冲区还有多少个字符未被使用
                              LPTSTR * ppszDesEnd 指向目标终止符‘\0’位置
							  标识位:STRSAFE_??处理函数成功或失败后的目标缓冲区字符;


功能:字符串比较函数
CompareStringW(
LCID Locale,      地方标识符:可以调用GetThreadLocale获得
DWORD dwCmpFlags, 带 NORM_??? 前缀的一个或多个常数,它们定义了象“忽略大小写”这样的一些选项
PCNZWCH lpString1,第一个字符串
int cchCount1,    第一个字符串长度
PCNZWCH lpString2,第二个字符串
int cchCount2);   第二个字符串长度

返回值 1小于 2等于 3大于

int
WINAPI 字符串比较的另外一个函数(根据码位比较)
CompareStringOrdinal(
 LPCWCH lpString1,
 int cchCount1,
 LPCWCH lpString2,
 int cchCount2,
 BOOL bIgnoreCase//按系统大写表信息执行比较为TRUE,字符串比较填false
);

*/

void main()
{
	HRESULT hr;
	wchar_t  ptstr_ch[20] = L"ff,";
	wchar_t  ptstr_ch1[20]=L"avva";
	wchar_t  ptstr_ch2[20];
	wchar_t  ptstr_ch3[20];
	wchar_t  ptstr_ch4[20] = {0};
	size_t lengh;

	hr=StringCchCat(ptstr_ch, _countof(ptstr_ch), ptstr_ch1);//拼接字符串
	if (hr != S_OK)//STRSAFE_E_INVALID_PARAMETER 将NULL传给了一个参数 STRSAFE_E_INSUFFICIENT_BUFFER 指定目标缓冲区太小
	{
		wcout.imbue(locale("chs"));
		wcout << ptstr_ch << "字节数" << _countof(ptstr_ch) << endl;
	}
	else
	{
		cout << "函数执行失败" << endl;
	}


	StringCchCopy(ptstr_ch2, _countof(ptstr_ch2), ptstr_ch1);//字符串拷贝
	wcout << ptstr_ch2 << endl;

	StringCchPrintf(ptstr_ch3, _countof(ptstr_ch3), L"要拷贝的:%s", ptstr_ch1);//打印到字符串
	wcout << ptstr_ch3 << endl;

	StringCchLength(ptstr_ch3, _countof(ptstr_ch3), &lengh);
	cout << lengh << endl;

	StringCchGets(ptstr_ch4, _countof(ptstr_ch4));//获得一个字符,不支持中文
	//wcout << ptstr_ch4 << endl;

	cout<< "GetThreadLocale "<< GetThreadLocale << endl;//获取进程地方标识

	cout<<"比较结果:"<<CompareString(GetThreadLocale(),NORM_IGNORECASE, L"你", 20, L"我", 20)<<endl;
	cout<<"比较结果:"<< CompareString(GetThreadLocale(), NORM_IGNORECASE, L"你", 20, L"你", 20) << endl;
	cout << "比较结果:" << CompareString(GetThreadLocale(), NORM_IGNORECASE, L"我", 20, L"你", 20) << endl;

	cout << "比较结果:" << CompareStringOrdinal( L"你", 20, L"我", 20,false) << endl;
	cout << "比较结果:" << CompareStringOrdinal( L"你", 20, L"你", 20, false) << endl;
	cout << "比较结果:" << CompareStringOrdinal( L"我", 20, L"你", 20, false) << endl;

	cin.get();

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值