文字理由

时间:2009-12-10 07:11:33

标签: c#

我正在寻找能够证明文本正确性的c#函数或例程。

例如,如果我有一个句子,我注意到当句子对齐到屏幕的边缘时,那些空格就放在了行中。插入的空间从中心开始,根据需要根据需要从两侧移出。

是否有一个C#函数,我可以传递我的字符串,比如50个字符,然后找回一个漂亮的56字符串?

提前致谢,

罗布

2 个答案:

答案 0 :(得分:2)

很好的任务。这是基于Linq扩展方法的解决方案。如果您不想使用它们,请参阅以前版本代码的历史记录。在这个例子中,中心左侧和右侧的空间相对于插入顺序是“相等的”。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static String Justify(String s, Int32 count)
    {
        if (count <= 0)
            return s;

        Int32 middle = s.Length / 2;
        IDictionary<Int32, Int32> spaceOffsetsToParts = new Dictionary<Int32, Int32>();
        String[] parts = s.Split(' ');
        for (Int32 partIndex = 0, offset = 0; partIndex < parts.Length; partIndex++)
        {
            spaceOffsetsToParts.Add(offset, partIndex);
            offset += parts[partIndex].Length + 1; // +1 to count space that was removed by Split
        }
        foreach (var pair in spaceOffsetsToParts.OrderBy(entry => Math.Abs(middle - entry.Key)))
        {
            count--;
            if (count < 0)
                break;
            parts[pair.Value] += ' ';
        }
        return String.Join(" ", parts);
    }
    static void Main(String[] args) {
        String s = "skvb sdkvkd s  kc wdkck sdkd sdkje sksdjs skd";
        String j = Justify(s, 5);
        Console.WriteLine("Initial: " + s);
        Console.WriteLine("Result:  " + j);
        Console.ReadKey();
    }
}

答案 1 :(得分:1)

据我所知,没有“内置”C#或.net库函数,所以你必须自己实现一些东西(或者在线查找一些适合你需要的代码)。

一个简单的贪婪算法不应该太难实现,但是:

Until the required number of characters is reached:
     Extend the shortest sequence of spaces by one
     (choose one randomly if there is more than one such sequence).

我会随机分配空格而不是从中心开始,以确保空间在文本中均匀分布(而不是集中在一个位置)。哦,请记住,有些人认为完全合理的固定字体文本比左对齐的固定字体文本更难阅读。