找回密码
 加入
搜索
查看: 5506|回复: 13

[系统综合] [已解决]如何做到C里面'strncat'一样的效果,可以截取char 里 的中文

 火.. [复制链接]
发表于 2012-4-17 18:37:28 | 显示全部楼层 |阅读模式
本帖最后由 Ycxw2008 于 2012-4-18 07:08 编辑

如何做到图中运行后的结果,
下面代码中的
$str=DllStructCreate("char str [5]")

DllStructSetData($str,"str","a啊")


也就是 'a啊' <截取 > ''

不是要字符串操作是结构元素的操作,相当于节短结构
因本人表达能力不太好,所以请回复前再看下6楼我的回复,万分抱歉






传送解决方案

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2012-4-17 18:57:30 | 显示全部楼层
回复 1# Ycxw2008


   Dim $str1 = 'a啊'
MsgBox(0, StringRight($str1, 1), StringTrimLeft($str1, 1))
发表于 2012-4-17 19:08:48 | 显示全部楼层
你点这个函数名,看看函数介绍,你就明白了。

StringMid
 楼主| 发表于 2012-4-17 19:10:52 | 显示全部楼层
本帖最后由 Ycxw2008 于 2012-4-17 19:15 编辑

回复 2# user3000
回复 3# lanfengc


    怪我刚才没有表达清楚,请重新看问题:(

评分

参与人数 1金钱 +40 收起 理由
bdancerlc + 40 态度很好,加分,加分,坛子里有一些个小P孩 ...

查看全部评分

发表于 2012-4-17 19:22:13 | 显示全部楼层
回复 4# Ycxw2008

多搞一个数据结构, 有什么分别吗?
$str=DllStructCreate("char str [5]")
DllStructSetData($str,"str","a啊")
$s = DllStructGetData($str, 'str')
MsgBox(0, StringRight($s, 1), StringTrimLeft($s, 1))
 楼主| 发表于 2012-4-17 19:29:45 | 显示全部楼层
本帖最后由 Ycxw2008 于 2012-4-17 19:42 编辑

回复 5# user3000


我的表达能力有问题,请见谅
我的意思是 就是像
StringMid('a啊',2,1)

这样的截取法,不过StirngMid是以Unicode格式计算的长度
我则是想按照ASCII格式计算的字符串长度来截取

;wchar里中文是1个字节,char里的中文是2个字节

$wstr=DllStructCreate("wchar wstr [3]")
DllStructSetData($str,"wstr","a啊")
MsgBox(0,"这种情况下截取就方便了,但是char就不会了:(",DllStructGetData($wstr,"wstr",2))
发表于 2012-4-17 19:43:27 | 显示全部楼层
回复 6# Ycxw2008

你用什么版本的AU3, 或者你不是用AU3?
AU3处理中文字符应该没你想像中这么复杂.
下面是帮助中有关 StringLen 函数的补充说明:
thesnow注:ANSI中中文字符占用两个字节(识别为两个字),UNICODE中中文字符因编码不同占用4到6个字节(识别为1个字).
目前ANSI版本的AutoIt已经停止开发.
发表于 2012-4-17 19:45:02 | 显示全部楼层
本帖最后由 haijie1223 于 2012-4-17 19:46 编辑

你计算的字符串是固定的么?是的话你就按长度来截取,但是你题目说是要截取中文。
要截取中文的话:
#include <array.au3>
Local $chr = "a啊"
Local $newchr = StringRegExp($chr, "[^\x00-\xff]+", 3)
If Not @error Then
        For $i = 0 To UBound($newchr) - 1
                MsgBox(0, "截取到的中文", $newchr[$i])
        Next
Else
        MsgBox(0, "Notice", "字符串中可能没有中文!")
EndIf
 楼主| 发表于 2012-4-17 19:46:47 | 显示全部楼层
回复 8# user3000


   这与版本好像没关系
   就是char和wchar的区别
发表于 2012-4-17 19:50:23 | 显示全部楼层
回复 9# haijie1223

楼主不是要字符串操作是结构元素的操作,相当于节短结构
 楼主| 发表于 2012-4-17 20:00:25 | 显示全部楼层
回复 11# netegg


    谢谢蛋总提醒,
哎 没文化真可怕 (说我自己)
发表于 2012-4-17 20:37:06 | 显示全部楼层
回复 10# netegg


    哦  受教了!
发表于 2012-4-17 22:03:04 | 显示全部楼层
在ACN,不学C真的太多东西看不懂了
发表于 2012-4-17 22:08:31 | 显示全部楼层
$tText1 = DllStructCreate("char szText[12]")
DllStructSetData($tText1, "szText", "Hello world")

$tText2 = DllStructCreate("char szText[6]", DllStructGetPtr($tText1) + 6)

MsgBox(0, "Text1", DllStructGetData($tText1, "szText"))
MsgBox(0, "Text2", DllStructGetData($tText2, "szText"))


简单地指针相加相减就可以了。

评分

参与人数 1金钱 +40 收起 理由
Ycxw2008 + 40 给力,3Q

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 13:33 , Processed in 0.150785 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表