首页 > 解决方案 > 将多行字符串旋转 90 度 - 行变成列

问题描述

说我有一个字符串

Line 1
Line 2

我想把这根弦顺时针旋转 90 度,这样它就变成了

LL
ii
nn
ee

12

旋转只需执行一次,这样它实际上是“将行变成列”。执行两次应该会给出原始字符串。(如果它真的旋转了 90 度,则必须重复四次才能回到原来的位置。)

标签: c#stringunicode

解决方案


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

namespace rotateString
{
    class Program
    {
        static void Main(string[] args)
        {
            var strings = new string[] { "Line 1", "Line 2" };

            var lines = new List<string>();

            var done = false;
            var j = 0;
            do
            {
                var line = "";
                for (var i = 0; i < strings.Length; ++i)
                {
                    var s = strings[i];
                    if (j >= s.Length)
                    {
                        done = true;
                        break;
                    }
                    line += s[j];
                }
                lines.Add(line);
                ++j;
            } while (!done);

            for(int i=0; i < lines.Count; ++i)
            {
                Console.WriteLine(string.Format("{0} : '{1}'", i, lines[i]));
            }
        }
    }
}

输出:

0 : 'LL'
1 : 'ii'
2 : 'nn'
3 : 'ee'
4 : '  '
5 : '12'
6 : ''

请注意,这几乎假设字符串都是相同的长度。调整它以使用最长的字符串长度是微不足道的。

使用 aStringBuilder会更有效率,但是除非您使用很多非常长的字符串,否则您永远不会看到性能上的差异。


推荐阅读