Разделите элементы данной строки - PullRequest
0 голосов
/ 01 марта 2019

Я должен разделить элементы на несколько маленьких подстрок с равной длины .Число подстрок должно быть равно заданным разделам .Если строка не может быть точно разделенной на указанные разделы, я должен сделать все разделы, кроме последнего, равной длины , и сделать последним - самым длинным ,

Я пытался сделать первую часть, но она работает не во всех случаях.Можете ли вы показать мне путь, но если это возможно с for-loop и т. Д .?

Например: {abcd}, 3 раздела -> {a, b, cd};{qrstuvwxyz}, 5 разделов -> {qr st uv wx yz}

private static List<string> Divide(List<string> input, int index, int partitions)
{
        string stringToDivide = input[index];
        input.RemoveAt(index);
        string add = "";

        if (stringToDivide.Length % partitions == 0)
        {

            for (int i = 0; i < stringToDivide.Length; i++)
            {
                add += stringToDivide[i] + " ";
            }

            input.Insert(index, add.Trim());
        }
        else
        {

        }
        return input;
        Console.WriteLine(string.Join(' ', input));
}

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Вы можете сделать что-то вроде этого:

private static List<string> Divide(List<string> input, int index, int partitions)
{
    var stringToDivide = input[index];
    input.RemoveAt(index);

    var stringToAdd = "";
    var partitionLength = stringToDivide.Length / partitions;

    for (int i = 0, partitionNum = 0; i < stringToDivide.Length; i++)
    {
        if (i % partitionLength == 0 && partitionNum != partitions)  // skip space in last part
        {
            if (i > 0) // do not add leading space
            {
                stringToAdd += " ";
            }

            partitionNum++;
        }

        stringToAdd += stringToDivide[i];
    }

    input.Insert(index, stringToAdd);

    return input;
}

Этот код добавляет пробелы каждый partitionLength, но пропускает пробел для последней строки.Обратите внимание, что для длинных струн лучше использовать StringBuilder.

0 голосов
/ 02 марта 2019
 public static List<string> DivideIntoPartitions(string stringToDivide, int partitions)
        {
            var parts = new List<string>(partitions);
            var len = stringToDivide.Length;

            if (len < partitions)
            {
                throw new ArgumentException("partitions should be less than length");
            }

            if (len % partitions == 0)
            {
                var eachSubstrLength = len / partitions;

                for (int i = 0; i < stringToDivide.Length; i += eachSubstrLength)
                {
                    parts.Add(stringToDivide.Substring(i, eachSubstrLength));
                }
            }
            else
            {
                var nextDivisibleNumber = len + (partitions - (len % partitions));
                var lengthOfLastSubstr = nextDivisibleNumber / partitions;
                var lastItem = stringToDivide.Substring((len - lengthOfLastSubstr));
                stringToDivide = stringToDivide.Remove((len - lengthOfLastSubstr));

                var chunksize = stringToDivide.Length / (partitions - 1);

                for (int i = 0; i < stringToDivide.Length; i += chunksize)
                {
                    parts.Add(stringToDivide.Substring(i, chunksize));
                }
                parts.Add(lastItem);

            }
            return parts;

        }

 var result = DivideIntoPartitions("qrstuvwxyz", 3);
0 голосов
/ 01 марта 2019

stringToDivide.Length % partitions - это количество символов, оставшихся после деления на partitions количество разделов.

stringToDivide.Length / partitions - это количество символов, которое должно быть в каждом разделе, кроме последнего, которое должно иметьк нему добавляются оставшиеся символы.

Так что просто возьмите первое partitions количество фрагментов stringToDivide.Length / partitions длины и добавьте то, что осталось к последнему фрагменту.

Когда строкаделится равномерно, stringToDivide.Length % partitions - ноль, поэтому это не особый случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...