【问题标题】:Paste Ascii Art in center of console在控制台中心粘贴 Ascii Art
【发布时间】:2020-11-30 15:51:46
【问题描述】:

嗨,我试图将 ascii 艺术粘贴到 C# 中的屏幕中心,它将普通文本打印到屏幕中心,但不是 ascii 艺术,有什么想法吗? (对不起,我是 C# 新手)

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string textToEnter = @"



 /$$$$$$$$ /$$$$$$$$  /$$$$$$  /$$$$$$$$
|__  $$__/| $$_____/ /$$__  $$|__  $$__/
   | $$   | $$      | $$  \__/   | $$   
   | $$   | $$$$$   |  $$$$$$    | $$   
   | $$   | $$__/    \____  $$   | $$   
   | $$   | $$       /$$  \ $$   | $$   
   | $$   | $$$$$$$$|  $$$$$$/   | $$   
   |__/   |________/ \______/    |__/   
                                        
                                        
                                        
                                       
                                                  


                ";
            Console.WriteLine(String.Format("{0," + ((Console.WindowWidth / 2) + (textToEnter.Length / 2)) + "}", textToEnter));
            Console.Read();
            Console.WriteLine("Hello World!");
        }
    }
}

【问题讨论】:

  • textToEnter.Length 是文本的总长度(即所有行中的每个字符),这不是您想要的。您需要文本中任何单行的最大长度。循环遍历每一行,找出最长的那一行的长度。您还想在每行的开头添加填充,而不是在整个字符串的开头(与第一行的开头相同)
  • 我能举个例子吗? ://
  • 循环遍历字符串中的每一行?大量的想法here——为了简单起见,我会使用.Split('\n')

标签: c# console console-application


【解决方案1】:

将整个文本块作为一个整体而不是每一行居中的一种方法是首先确定最长行的长度,然后确定使该行居中所需的左侧填充,然后将该填充添加到开头文本块的每一行。

我们可以通过拆分NewLine 字符,填充每一行,然后重新加入修改后的行来做到这一点:

var lines = textToEnter.Split(new[] {Environment.NewLine}, StringSplitOptions.None);
var longestLength = lines.Max(line => line.Length);
var leadingSpaces = new string(' ', (Console.WindowWidth - longestLength) / 2);
var centeredText = string.Join(Environment.NewLine, 
    lines.Select(line => leadingSpaces + line));

Console.WriteLine(centeredText);

【讨论】:

    【解决方案2】:

    可能这段代码 sn-p 可以帮助您解决问题:

    using (StringReader reader = new StringReader(textToEnter))
    {
        string line = string.Empty;
        do
        {
            line = reader.ReadLine();
            if (line != null)
            {
                Console.SetCursorPosition((Console.WindowWidth - line.Length) / 2, Console.CursorTop);
                Console.WriteLine(line);
            }
        } while (line != null);
    }
    

    该代码用于逐行读取字符串,在将其打印到终端之前,无需在文本前添加空格来格式化字符串,我们只需将光标移动到需要打印的位置即可。

    【讨论】:

    • 这会使每一行居中,而不是将整个文本块居中
    • 就问题而言,结果是一样的。如果删除每行末尾的空格,可能会遇到问题。
    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2023-03-06
    • 2011-04-18
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多