A2W和W2A :很好的多字节和宽字节字符串的转换宏

 以前看《Window核心编程》,感觉多字节和宽字节之间还比较麻烦的,至少MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解。近日接触了ATL的一个很好的字符串的转换宏:A2W和W2A。

 用法很简单,A2W的用法:

    

           #include <atlconv.h>
       DoSomething(LPWSTR str);   //   函数声明

       USES_CONVERSION;
       DoSomething(A2W( " SomeString "));

 

       W2A的用法:

    #include <atlconv.h>
    DoSomething(LPCSTR str);  //   函数声明

     USES_CONVERSION;
    DoSomething(W2A(L " SomeString "));

          

另外使用这两个宏时最好把它们单独放入一个函数实现,具体原因见:

谨慎使用A2W等字符转换宏

这儿一篇详细介绍这两个宏的原理的文章:VC中一个关于宏的使用问题

给定输入字符串为:"aabccca",输出应为:"a2bc3a"。 首先,我们可以遍历字符串,用一个计数器记录相同字符的数量,当遇到不同字符时,将前一个字符和它的计数器值拼接到输出字符串中。 具体过程如下: 1. 初始化一个空字符串output,用于存储结果。 2. 初始化两个变量prev和count,用于分别存储前一个字符和前一个字符的数量,初始值分别为字符串的第一个字符和1。 3. 遍历字符串,从第二个字符开始: a. 如果当前字符与prev相同,则将count加1。 b. 如果当前字符与prev不同,则将prev和count拼接到output中,并更新prev为当前字符,count为1。 4. 遍历结束后,将最后一对字符和计数器的值拼接到output中。 5. 返回output作为输出结果。 应用上述算法到给定字符串"aabccca"的例子中,运行过程如下: 1. 初始化output为一个空字符串。 2. 初始化prev为第一个字符'a',count为1。 3. 遍历字符串: a. 当前字符为'a',与prev相同,将count加1。 b. 当前字符为'b',与prev不同,将prev和count拼接到output中,prev更新为'b',count为1。 c. 当前字符为'c',与prev不同,将prev和count拼接到output中,prev更新为'c',count为1。 d. 当前字符为'c',与prev相同,将count加1。 e. 当前字符为'a',与prev不同,将prev和count拼接到output中,prev更新为'a',count为1。 4. 遍历结束后,将最后一对字符和计数器的值拼接到output中,此时output为"a2b1c3a1"。 5. 返回output作为输出结果。 综上所述,将输入字符串"aabccca"转换为输出字符串"a2bc3a"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值