sanmoking
发表于 2009-12-23 15:47:22
哎,丢人了,貌似26# amu的就是这个方法,算了,没震住人...
sanmoking
发表于 2009-12-23 15:54:36
本帖最后由 sanmoking 于 2009-12-23 15:56 编辑
回复sanmoking
$a = "sanmoking使用纯AU3编写,禁止调用其他语言(如VBS、JAVA等)。加分:视思 ...
afan 发表于 2009-12-23 15:44 http://www.autoitx.com/images/common/back.gif
简单哈哈,,$a = "sanmoking使用纯AU3编写,禁止调用其sanmoking1001他语言(如VBS、JAVA等)。加分:视思路加分,10-60分不等。"
$b = "sanmoking"
While 1
if StringInStr ($a,$b) > 0 Then
$b = $b&Random(0,9,1)
Else
ExitLoop
EndIf
WEnd
$ok = StringInStr ($a&$b,$b)-1
MsgBox(0,"结果","StringLen 的结果:"&StringLen ($a)&@CRLF&"我的结果:"&$ok)
afan
发表于 2009-12-23 16:46:57
回复 32# sanmoking
高手就是难不倒...:face (32):
akmm88
发表于 2009-12-27 18:57:27
;主流的都让你们用了,我来2个非主流的.只是另类不做实际使用.
$str="; Script Start - Add我是中文 your code below here测试"
;方法1 中文被识别为2个长度
#include <Constants.au3>
$foo = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
$n=StdinWrite($foo, $str)
MsgBox(0,"",$n)
;方法1结束
;方法2中文和英文同为1个长度
TCPStartUp()
$ConnectedSocket = TCPConnect("61.187.251.222", 80);IP为www.autoitx.com
$n=TCPSend($ConnectedSocket, $str)
TCPShutdown ()
MsgBox(0,"",$n)
;如此判断字符串长度,肯定是前无古人,后无来者.
lpxx
发表于 2010-2-26 23:17:26
学到的不仅仅是代码。
lanfengc
发表于 2010-2-27 15:55:01
回复 15# afan
表驱动法简单来说就是把原来须要用类似 switch-case 之类语句来做的事用表的对应关系来做。它是初学者必备的武器。这么说太抽象,看个例子。它是一个根据学生的成绩来说出等级的类:
class Calc
{
private static double[] rangeLimit = { 50.0, 65.0, 75.0, 90.0, 100.0 };
private static string[] grade = { "F", "D", "C", "B", "A" };
private static readonly int maxLevel = grade.Length - 1;
public static string CalculateGrade(double score)
{
int level = 0;
while (level <= maxLevel)
{
if (score < rangeLimit) return grade;
else level++;
}
return grade;
}
}如果你的成绩是 89,那么你的等级应该是 B。上面例子很好懂。但是要注意边界的问题。这是个做范围判断的例子。下面是一个一一对应的例子。这个类会把一个十进制的正整数转换成它的十六进制表示:
class Calc
{
private static string[] hexChars = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
private static string ConvertToHexFormat(uint digits)
{
Stack<string> stack = new Stack<string>();
uint tmp;
do
{
tmp = digits & 0xF;
stack.Push(hexChars);
digits = digits >> 4;
}
while (digits != 0);
StringBuilder sb = new StringBuilder();
while (stack.Count > 0)
{
sb.Append(stack.Pop());
}
return sb.ToString();
}
public static string Convert(uint digits)
{
return ConvertToHexFormat(digits);
}
public static string Convert(string digits)
{
uint tmp = uint.Parse(digits);
return ConvertToHexFormat(tmp);
}
}
怎么样?很爽吧。核心的代码不过 3 句而已!
表驱动法可以让你省去一大堆令人头晕的条件判断语句,让代码看起来更优雅。本文只是让你对它有一个直观的印象,并不包含它全面的知识。它还包括定义索引等其它的东西。比如说,上面的等级评定的示例中,负责查找等级的循环明显是程序的主要消耗所在。你可以考虑用二分法之类的方法来节省时间。如果表中包含的元素数十分巨大怎么办?定义个索引。
最后给一个把 byte[] 转换成它对应的十六进制表示的例子。以前 CSDN 上有人问过,说为什么我用 framework 里的 MD5ServiceProvider 提供的方法来计算,得到的结果不唯一?答案是你的结果没有转换成它的等价的字符串表示。下面是 MSDN 上的方法,有了它,你再用 MD5ServiceProvider 就不会有问题了:
class HexTest
{
static char[] hexDigits = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static string ToHexString(byte[] bytes) {
char[] chars = new char;
for (int i = 0; i < bytes.Length; i++) {
int b = bytes;
chars = hexDigits;
chars = hexDigits;
}
return new string(chars);
}
static void Main() {
byte[] b = {0x00, 0x12, 0x34, 0x56, 0xAA, 0x55, 0xFF};
Console.WriteLine(ToHexString(b));
}
}
百度找的。
lanfengc
发表于 2010-2-27 15:56:35
表驱动法 说白了就是创建表与事件的对应关系。 当出现一个事件。就可以在表中找出相应的数据。 直接读出该数据就是要的结果。
类似于查立方表或者是平方表的方法。
chenronting
发表于 2010-3-8 18:05:00
完全不懂。什么叫表驱动法。。 汗。 还是一个菜鸟啊。~~!
foboy
发表于 2010-7-6 01:21:54
我也来凑热闹:
UBound(StringToASCIIArray("d你sfds"))