Ycxw2008 发表于 2012-4-17 18:37:28

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

本帖最后由 Ycxw2008 于 2012-4-18 07:08 编辑

如何做到图中运行后的结果,
在下面代码中的
$str=DllStructCreate("char str ")
DllStructSetData($str,"str","a啊")

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

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






传送解决方案

user3000 发表于 2012-4-17 18:57:30

回复 1# Ycxw2008


   Dim $str1 = 'a啊'
MsgBox(0, StringRight($str1, 1), StringTrimLeft($str1, 1))

lanfengc 发表于 2012-4-17 19:08:48

你点这个函数名,看看函数介绍,你就明白了。
StringMid

Ycxw2008 发表于 2012-4-17 19:10:52

本帖最后由 Ycxw2008 于 2012-4-17 19:15 编辑

回复 2# user3000
回复 3# lanfengc


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

user3000 发表于 2012-4-17 19:22:13

回复 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: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 ")
DllStructSetData($str,"wstr","a啊")
MsgBox(0,"这种情况下截取就方便了,但是char就不会了:(",DllStructGetData($wstr,"wstr",2))

user3000 发表于 2012-4-17 19:43:27

回复 6# Ycxw2008

你用什么版本的AU3, 或者你不是用AU3?
AU3处理中文字符应该没你想像中这么复杂.
下面是帮助中有关 StringLen 函数的补充说明:
thesnow注:ANSI中中文字符占用两个字节(识别为两个字),UNICODE中中文字符因编码不同占用4到6个字节(识别为1个字).
目前ANSI版本的AutoIt已经停止开发.

haijie1223 发表于 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

Ycxw2008 发表于 2012-4-17 19:46:47

回复 8# user3000


   这与版本好像没关系
   就是char和wchar的区别

netegg 发表于 2012-4-17 19:50:23

回复 9# haijie1223

楼主不是要字符串操作是结构元素的操作,相当于节短结构

Ycxw2008 发表于 2012-4-17 20:00:25

回复 11# netegg


    谢谢蛋总提醒,
哎 没文化真可怕 (说我自己)

haijie1223 发表于 2012-4-17 20:37:06

回复 10# netegg


    哦受教了!

pp648852 发表于 2012-4-17 22:03:04

在ACN,不学C真的太多东西看不懂了

pusofalse 发表于 2012-4-17 22:08:31

$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]
查看完整版本: [已解决]如何做到C里面'strncat'一样的效果,可以截取char 里 的中文