本帖最后由 wuyi8808 于 2009-04-15 21:22:56 编辑

解决方案 »

  1.   

    key = "\0"; //转义符是反斜杠\
      

  2.   

     key = "\0"
    感觉是这个
      

  3.   

    7 楼的解是正确的。
    现在改进一下 Locked 方法,大家继续。bool Locked(string key)
    {
      if (string.Compare(key, "", StringComparison.InvariantCulture) != 0) return true;
      return key.Trim("\0").Length == 0;
    }
      

  4.   

    更正一下,16楼的代码应该是:bool Locked(string key)
    {
      if (string.Compare(key, "", StringComparison.InvariantCulture) != 0) return true;
      return key.Trim('\0').Length == 0;
    }
      

  5.   

    顺便贴出楼主昨天的帖子,以供大家参考:
    http://topic.csdn.net/u/20090414/19/703ffce1-1b2e-4980-aea4-f9aa62038f81.html
      

  6.   

    //以下值都return false。key="\u11A3";
    key="\u11A4";
    key="\u11A5";
    key="\u11A6";
    key="\u11A7";
      

  7.   

    23楼和24楼的解是正确的。
    另外,以下的 key 值也可以使 Locked 方法返回 false :
    "\0xFFFF"
    "\0xFFFE"
    "\0xFFFD"
    ...
    "\0xFF00"
      

  8.   

    如果
    var s1 = "Mu\x0308nchen";
    var s2 = s1.Normalize();那么,我们有:
    string.Compare(s1, s2, StringComparison.InvariantCulture) == 0但是:
    s1.Length != s2.Length。这也是一个有趣的事实。
      

  9.   


    ojlovecd 版主的答案是类似这样子的:using System.Text;
    // ...
    key = Encoding.Unicode.GetString(Encoding.ASCII.GetBytes("A"));
      

  10.   

    看大家如此热烈, 就出来人讲讲吧
    实在没看懂啥意思....也讲讲, 让像我一样puzzle的人有所收获啊!
      

  11.   

    A similar oddity would be characters with no weight like U+FFFD.  So if I have str = "A\xFFFD\xFFFD\xFFFD", then all of str.Substring(0,1) == str.Substring(0,2) == str.Substring(0,3) == str.Substring(0,4) == "A".  And in this case str.StartsWith("A") would be true.
    但是我试验了下:string str2 = "A\xFFFD\xFFFD\xFFFD";
                string find2 = "A";            Console.WriteLine("str2 = " + str2);
                Console.WriteLine("1  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
                Console.WriteLine("Substring: " + (str2.Substring(0, 1) == find2) + "   Substring is:" + str2.Substring(0, 1));
                Console.WriteLine("StartsWith:" + str2.StartsWith(find2));
                Console.WriteLine("IndexOf:   " + str2.IndexOf(find2));            Console.WriteLine("2  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
                Console.WriteLine("Substring: " + (str2.Substring(0, 2) == find2) + "   Substring is:" + str2.Substring(0, 2));
                Console.WriteLine("StartsWith:" + str2.StartsWith(find2));
                Console.WriteLine("IndexOf:   " + str2.IndexOf(find2));            Console.WriteLine("3  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
                Console.WriteLine("Substring: " + (str2.Substring(0, 3) == find2) + "   Substring is:" + str2.Substring(0, 3));
                Console.WriteLine("StartsWith:" + str2.StartsWith(find2));
                Console.WriteLine("IndexOf:   " + str2.IndexOf(find2));            Console.WriteLine("4  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
                Console.WriteLine("Substring: " + (str2.Substring(0, 4) == find2) + "   Substring is:" + str2.Substring(0, 4));
                Console.WriteLine("StartsWith:" + str2.StartsWith(find2));
                Console.WriteLine("IndexOf:   " + str2.IndexOf(find2));
    1  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Substring: True   Substring is:A
    StartsWith:True
    IndexOf:   0
    2  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Substring: False   Substring is:A?
    StartsWith:True
    IndexOf:   0
    3  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Substring: False   Substring is:A??
    StartsWith:True
    IndexOf:   0
    4  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Substring: False   Substring is:A???
    StartsWith:True
    IndexOf:   0
    结果是 str.Substring(0,3) == str.Substring(0,4) == "A".  都不成立啊
      

  12.   

    目前,所有没清楚本贴写的是什么的朋友, 试试下面这段代码, 跟踪一下,就该清楚了. 
    如果还不清楚的话, 看看t 的值 ! string str1 = "Mu\x0308nchen";
    string t = "x\x0308";
    string str = "Muchen";
    string find = "Mu";
    Console.WriteLine("Substring: " + (str.Substring(0, 2) == find) + "   Substring is:" +str.Substring(0, 2));
    Console.WriteLine("StartsWith:" + str.StartsWith(find));
    Console.WriteLine("IndexOf:   " + str.IndexOf(find));
      

  13.   

    思路是去掉转义字符 \0 绕过第一道防线·
    string 字符格式 默认以  \0 作为结束符号 (有C基础的都知道)
    36楼的 兄弟·已经给出了绕 \0 的方法 下面是正解之一 KEY 一个空格即可
     class Program
        {
            static void Main(string[] args)
            {
                bool isok =true;
                while(isok)
                {
                    isok = Locked(Encoding.Unicode.GetString(Encoding.ASCII.GetBytes(Console.ReadLine())));                Console.WriteLine("{0}", isok);
                }
                Console.WriteLine("解除{0}", !isok);
                Console.ReadLine();
            }      static  bool  Locked(string key)
            {           
                if (string.Compare(key, "", StringComparison.InvariantCulture) != 0) return true;
                return key.Trim('\0').Length == 0;
              
            }         }
      

  14.   

    没看明 return true or false 有什么用
      

  15.   

    能不能说说原理啊?
    string str1 = "Mu\x0308nchen";
    string t = "x\x0308";
    \x0308是什么意思?