Visual C C++ 字符串 字符 学习笔记 20210324

string char指针 char数组

获取string的字符个数用自身的方法 length()

std::string str1 = "str1";
size_t length = str1.length();

获取char* char[] 的字符个数用 strlen()

strlen()不能用于string

char charArray[] = "hello";
size_t charArrayLength = strlen(charArray);
const char* pChar = "你好";
size_t pCharLength = strlen(pChar);
std::cout << charArrayLength << std::endl;
std::cout << pCharLength << std::endl;

string转char* 要加 const

联想到Java中String是固定的

string str = "hello";  // #include <string>
const char* pointChar = str.data();  // 要加  const

char指针数组 可以直接赋值给string

char charArray[] = "hello";
const char* pChar = "你好";
std::string str1 = charArray;
std::string str2 = pChar;
std::cout << str1 << std::endl;
std::cout << str2 << std::endl;

WCHAR 就是 wchar_t (宽字符)

wchar_t类型主要用在国际化程序的实现中
wchar_t数据类型一般为16位或32位

初始化

const wchar_t* WcharP1 = L"hello";
const wchar_t* WcharP2 = TEXT("world");
const WCHAR* WcharP3 = L"你好";
const WCHAR* WcharP4 = TEXT("世界");
wchar_t wcharArray1[] = L"wcharArray1";   //直接赋值
wchar_t wcharArray2[] = TEXT("wcharArray2");
wchar_t wcharArray3[3] = TEXT("12");  //只能放<=2个字符
wchar_t wcharArray4[4] = L"123";  //只能放<=3个字符
wchar_t wcharArray5[9] = L"123";  // 可以放少于8个字符 , 只能放<=8个字符
wchar_t wcharArray6[10];   // 初始化容量为10 , 能容纳9个字符 , 结束符占一个 
//wcharArray1 = wcharArray2;   //不行 数组不能改变值
//wcharArray1 = wcharArray3;;   //不行 数组不能改变值
//wcharArray3 = wcharArray1;;   //不行 数组不能改变值
//wcharArray1 = WcharP1;;   //不行 数组不能改变值
//wcharArray3 = WcharP1;;   //不行 数组不能改变值
WcharP1 = WcharP2;    // const 定义的指针依然能改变指向
WcharP1 = WcharP3;    // const 定义的指针依然能改变指向
WcharP1 = wcharArray1;    // const 定义的指针依然能改变指向
WcharP1 = wcharArray5;    // const 定义的指针依然能改变指向
WcharP1 = wcharArray6;    // const 定义的指针依然能改变指向
wchar_t* wcharP1 = wcharArray1;
//wcharP1 = WcharP2;    // const 定义的指针不能赋值给非 const的
//wcharP1 = WcharP3;    // const 定义的指针不能赋值给非 const的
wcharP1 = wcharArray1;    // const 和 非const 的指针都能被数组赋值
wcharP1 = wcharArray5;    // const 定义的指针依然能改变指向
wcharP1 = wcharArray6;    // const 定义的指针依然能改变指向
wcharP1 = wcharArray1;
wchar_t* wcharP2 = wcharArray2;  //数组可以赋值给非const 的指针;
wchar_t* wcharP3 = wcharArray3;
wchar_t* wcharP4 = wcharArray4;
wchar_t* wcharP5 = wcharArray5;
wchar_t* wcharP6 = wcharArray6;
wcharP1 = wcharP6;
wcharP1 = wcharP5;
wcharP1 = wcharP4;
wcharP1 = wcharP3;
wcharP1 = wcharP2;
wcharP1 = wcharArray1;
//wcharP3 = WcharP3; // cont 不能赋值给 非const
	
//LPWSTR lpwstr1 = WcharP1;    // const Wchar指针不能赋值给LPWSTR
LPWSTR lpwstr1 = wcharP1;    // 非 const Wchar指针可以赋值给LPWSTR
LPWSTR lpwstr2= wcharArray1;  // LPWSTR可以指向Wchar数组
//LPWSTR lpwstr3 = TEXT("lpwstr3"); LPSTR lpstr4 = L"lpwstr4";  // LPWSTR 不能用 L 或 TEXT 直接赋值   因为它没有const修饰
LPCWSTR lpcwstr3 = TEXT("lpcwstr3");  LPCWSTR lpcwstr4 = L"lpcwstr4";   //  LPCWSTR就是 加了const的 LPWSTR   所以能用  TEXT("")   L""  赋值
LPWSTR 就是 WCHAR* 或 wchar_t* 以 NULL(0) 终止
typedef _Null_terminated_ WCHAR *NWPSTR, *LPWSTR, *PWSTR; //空终止字符串
LPCWSTR 是 加了const的 LPWSTR
typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;

wchar_t* 转 int

const wchar_t* wcharP1 = L"1234567";
int i1 = _wtoi(wcharP1);

int 转 wchar_t*

要用 #define _CRT_SECURE_NO_WARNINGS 1 压制警告
还要放在最上面, 各头文件引入的上面

#define _CRT_SECURE_NO_WARNINGS 1   //要放最上面  压制 _itow()  int转wchar_t * 的警告
wchar_t   dec_itow_buffer  [_MAX_ITOSTR_BASE10_COUNT];  //定义一个 _itow()  十进制用的缓冲数组
int i1 = 123456;
wchar_t* wcharP1 = _itow(i1, dec_itow_buffer, 10);   //参数3表示十进制
std::wcout << wcharP1;

获取wchar_t 指针或数组的长度 wcslen()

Check_return_ _ACRTIMP size_t __cdecl wcslen( _In_z_ wchar_t const* _String );
wchar_t    wchars[] = L"12345";
std::cout << wcslen(wchars) << std::endl;
const wchar_t* wstrP = L"123456";
std::cout << wcslen(wstrP)  <<std::endl;

char 转 wchar_t 的函数: mbstowcs()

mbstowcs(wcharArray, pChar, strlen(pChar));

const char* pChar = "1234567";
wchar_t wcharArray[10];  //开辟的空间要比字符数大至少1
std::cout << "strlen()可获取char指针数组的字符数=" << strlen(pChar) << std::endl;  
std::cout << "mbstowcs()返回size_t , 代表转换的字符数=" << mbstowcs(wcharArray, pChar, strlen(pChar)) << std::endl ;
std::wcout << "转换后,wchar数组的内容=" << wcharArray << std::endl ;
std::cout << "wcslen()获取wchar指针数组的字符数=" << wcslen(wcharArray

未完待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值