[已解决]如何做到C里面'strncat'一样的效果,可以截取char 里 的中文
本帖最后由 Ycxw2008 于 2012-4-18 07:08 编辑如何做到图中运行后的结果,
在下面代码中的
$str=DllStructCreate("char str ")
DllStructSetData($str,"str","a啊")
也就是 'a啊' <截取 > '啊'
不是要字符串操作是结构元素的操作,相当于节短结构
因本人表达能力不太好,所以请回复前再看下6楼我的回复,万分抱歉
传送解决方案 回复 1# Ycxw2008
Dim $str1 = 'a啊'
MsgBox(0, StringRight($str1, 1), StringTrimLeft($str1, 1)) 你点这个函数名,看看函数介绍,你就明白了。
StringMid
本帖最后由 Ycxw2008 于 2012-4-17 19:15 编辑
回复 2# user3000
回复 3# lanfengc
怪我刚才没有表达清楚,请重新看问题:( 回复 4# Ycxw2008
多搞一个数据结构, 有什么分别吗?
$str=DllStructCreate("char str ")
DllStructSetData($str,"str","a啊")
$s = DllStructGetData($str, 'str')
MsgBox(0, StringRight($s, 1), StringTrimLeft($s, 1)) 本帖最后由 Ycxw2008 于 2012-4-17 19:42 编辑
回复 5# user3000
我的表达能力有问题,请见谅
我的意思是 就是像
StringMid('a啊',2,1)
这样的截取法,不过StirngMid是以Unicode格式计算的长度
我则是想按照ASCII格式计算的字符串长度来截取
;wchar里中文是1个字节,char里的中文是2个字节
$wstr=DllStructCreate("wchar wstr ")
DllStructSetData($str,"wstr","a啊")
MsgBox(0,"这种情况下截取就方便了,但是char就不会了:(",DllStructGetData($wstr,"wstr",2)) 回复 6# Ycxw2008
你用什么版本的AU3, 或者你不是用AU3?
AU3处理中文字符应该没你想像中这么复杂.
下面是帮助中有关 StringLen 函数的补充说明:
thesnow注:ANSI中中文字符占用两个字节(识别为两个字),UNICODE中中文字符因编码不同占用4到6个字节(识别为1个字).
目前ANSI版本的AutoIt已经停止开发. 本帖最后由 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
回复 8# user3000
这与版本好像没关系
就是char和wchar的区别 回复 9# haijie1223
楼主不是要字符串操作是结构元素的操作,相当于节短结构 回复 11# netegg
谢谢蛋总提醒,
哎 没文化真可怕 (说我自己) 回复 10# netegg
哦受教了! 在ACN,不学C真的太多东西看不懂了 $tText1 = DllStructCreate("char szText")
DllStructSetData($tText1, "szText", "Hello world")
$tText2 = DllStructCreate("char szText", DllStructGetPtr($tText1) + 6)
MsgBox(0, "Text1", DllStructGetData($tText1, "szText"))
MsgBox(0, "Text2", DllStructGetData($tText2, "szText"))
简单地指针相加相减就可以了。
页:
[1]