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"))
页: 1 2 [3]
查看完整版本: 练习001 - 计算字符串长度