#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();
}
c++ Windows编程 字符串
最新推荐文章于 2022-11-05 12:00:28 发布