1

我们有一个标题列表,其中一些以数字开头(例如 5 种制作小部件的方法)。我们想在不更改标题的情况下将其分类为“五种方式……”。我们知道一些电影场所会这样做,但我无法在网上找到有关如何做到这一点的信息。有任何想法吗?

4

4 回答 4

3

存储原始标题和拼写的标题。

select OriginalTitle from Movies order by spelledTitle

另请参阅:将整数转换为书面数字

于 2010-02-20T00:18:40.580 回答
1

在计算机科学中,学习编程时,有时会有一个将数字转换为文本的作业。喜欢:

526 = Fivehundredtwentysix

在这种情况下,这可能是您需要的东西。

这是一个微不足道的任务,但它是一个很好的教训。

于 2010-02-20T00:18:58.803 回答
1

创建自定义比较器请参阅http://support.microsoft.com/kb/320727

基本上你想要做的是测试第一个字符是否是数字。如果它不只是恢复到标准字符串比较,那么您可以进行一些额外的处理以获得数字的文本版本。

一旦你拥有了这个大多数排序算法,你就可以将比较器传入。

于 2010-02-20T00:31:08.853 回答
0

扩展其他人的建议:

  1. 其中最难的部分可能是将数字转换为表示该数字的英文字符串的代码——Sani 的编程作业。我提供了一个可能不符合您要求的简化示例。
私有静态字符串 [] 数字名称 = 新字符串 []
    {“哦”、“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”};
私有静态字符串 ReplaceDigits(string s)
{
    string convertSoFar = ""; //如果性能有问题,可以使用 StringBuilder。
    for (int charPos = 0; charPos < s.Length; charPos++)
    {
        if (char.IsNumber(s[charPos]))
        {
            //添加与数字匹配的数字名称。
            convertSoFar += digitnames[int.Parse(s[charPos].ToString())];
        }
        别的
        {
            //我们已经到了字符串前面的数字的末尾。
            //加回s的其余部分并退出。
            convertSoFar += s.Substring(charPos);
            休息;
        }
    }
    返回已转换的SoFar;
}

这段代码将“101 dalmations”变成“oneohone dalmations”,将“12anger men”变成“onetwoanger men”。可以构建一个更完整的解决方案,也许是从Wedge 对稍微不同的问题的解决方案。我没有测试过该代码,它的设计目的不是处理数字后面的字符串,但这可能是一个好的开始。

  1. 在现代 C#(我认为是 3.0 和更高版本)中,您可以将方法名称传递给 Sort,而不是显式创建 IComparable 或 IComparer。这与迈克尔的链接本质上是相同的想法。另一个相关选项是匿名lambda 表达式,它甚至不需要外部方法。就我个人而言,我认为这样的代码读起来更干净。
私有静态整数 NumberReplacingCompare(字符串 strA,字符串 strB)
{
    返回 ReplaceDigits(strA).CompareTo(ReplaceDigits(strB));
}
私有静态无效输出排序字符串()
{
    列表字符串 = new List(File.ReadAllLines(@"D:\Working\MyStrings.txt")); //从文件中拉出字符串(或者它们来自哪里
    字符串.Sort(NumberReplacingCompare); //排序,使用NumberReplacingCompare作为比较函数
    foreach(字符串中的字符串 s)
    {
        System.Console.WriteLine(s);
    }
}
于 2010-02-20T03:30:54.603 回答