我在确定是否对两个 c# 字符串进行排序时遇到问题

本文关键字:字符串 排序 问题 遇到 两个 是否 | 更新日期: 2023-09-27 18:30:49

我创建了一个确定两个字符串是否排序的方法。 除了一个之外,我所有的测试用例都可以工作。 代码如下。

class Program
{
    static void Main(string[] args)
    {
        bool test1 = isSorted("test1", "test2");
        bool test2 = isSorted("4576", "4567");
        bool test3 = isSorted("test10", "test11");
        bool test4 = isSorted("abdc", "abcd");
    }
    public static bool isSorted(string MyFirstString, string MySecondString)
    {
        string MyFirstCutString = MyFirstString.ToLower();
        string MySecondCutString = MySecondString.ToLower();
        if (MyFirstString.Length > MySecondString.Length)
            MyFirstCutString = MyFirstCutString.Substring(0, MySecondString.Length);
        else if (MySecondString.Length > MyFirstString.Length)
            MySecondCutString = MySecondCutString.Substring(0, MyFirstCutString.Length);
        for (int i = 0; i < MyFirstCutString.Length; i++)
        {
            if (getNumberic(MyFirstCutString[i]) > getNumberic(MySecondCutString[i]))
                return false;
        }
        return true;
    }
    public static int getNumberic(char myLetter)
    {
        switch (myLetter)
        {
            case 'a':
                return 1;
            case 'b':
                return 2;
            case 'c':
                return 3;
            case 'd':
                return 4;
            case 'e':
                return 5;
            case 'f':
                return 6;
            case 'g':
                return 7;
            case 'h':
                return 8;
            case 'i':
                return 9;
            case 'j':
                return 10;
            case 'k':
                return 11;
            case 'l':
                return 12;
            case 'm':
                return 13;
            case 'n':
                return 14;
            case 'o':
                return 15;
            case 'p':
                return 16;
            case 'q':
                return 17;
            case 'r':
                return 18;
            case 's':
                return 19;
            case 't':
                return 20;
            case 'u':
                return 21;
            case 'v':
                return 22;
            case 'w':
                return 23;
            case 'x':
                return 24;
            case 'y':
                return 25;
            case 'z':
                return 26;
            case 'O':
                return 27;
            case '1':
                return 28;
            case '2':
                return 29;
            case '3':
                return 30;
            case '4':
                return 31;
            case '5':
                return 32;
            case '6':
                return 33;
            case '7':
                return 34;
            case '8':
                return 35;
            case '9':
                return 36;
            default:
                return 1000;
        }
    }
}

测试结果如下:

test1 result is true
test2 result is false
test3 result is false (NOT GOOD!)
test4 result is true

我看不出我的逻辑有任何缺陷。

我在确定是否对两个 c# 字符串进行排序时遇到问题

您在交换机中混淆了O0。这意味着0 1000获取数值,并在1后面排序。

而不是0你在getNumberic方法中O

顺便说一句,我至少会像这样重写它:

    public static int getNumberic( char c )
    {
        if( c >= 'a' && c <= 'z' )
        {
            return c - 'a';
        }
        else if( c >= '0' && c <= '9' )
        {
            return 'z' + c - '0';
        }
        else
        {
            return 1000;
        }
    }

不是你搜索的答案,但你对此有何看法?

public bool isSorted(string s1, string s2)
{
    return s1.ToLower().CompareTo(s2.ToLower()) < 0;
}

public bool isSorted(string s1, string s2)
{
    return String.Compare(s1, s2, true) < 0;
}