Вставить в подстроку не вставляет по индексу - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть следующий код, который предназначен для обхода и добавления значений к строковому значению.Любое другое значение, начиная с индекса 0 строителя строк, RepeatIndexes, всегда должно быть волнистым.и другое значение из определенного индекса в библиотеке, которую я имею в другом месте.Просто сделайте вид, что

char InsertThis = indexJustForRepetas[IndexOfIndexes[RepeatTime]];  

^ - = 's' X '- ^

вот фактический код / ​​цикл:

StringBuilder RepeatIndexes = new StringBuilder("");
int ZeroPosition = 0;        //for the indexes which will remain blank until the next loop-
int charPosition = 1;
int RepeatTime = 0;       //1 thru final --^-                         1^
while (NumberHalf > 0)   //find and replace the char that was repeated within the string, 'AccountableToRepeats', with something that we can decipher later, during decryption- 
{

    RepeatIndexes.Insert(ZeroPosition, "~"); //inserting a squiggly line until next loop-
    char InsertThis = indexJustForRepetas[IndexOfIndexes[RepeatTime]];   //find char at IndexOfIndexes to add into position-
    RepeatIndexes.Insert (charPosition, InsertThis);
    RepeatTime =RepeatTime +2;
    ZeroPosition = ZeroPosition + 2; 
    NumberHalf = NumberHalf - 1;
}

индекс дляволнистые линии ('~') начинаются с 0: int ZeroPosition = 0;

Индекс для символов ("X") начинается с 1: int charPosition = 1;

Но по какой-то причиневывод, который я получаю: ~XXX~~

когда это должно быть: ~X~X~X

Есть ли что-то в природе строителя строк или insert() Я не понимаю?Цикл выглядит так, как будто он должен быть правильно увеличен, но вывод просто не имеет никакого смысла для меня.

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

1 Ответ

0 голосов
/ 15 декабря 2018

РЕДАКТИРОВАТЬ:

Я думаю, проблема в том, что charPosition не обновляется.Вам необходимо обновить charPosition с теми же значениями, что и RepeatTime и ZeroPosition.Итак, добавьте charPosition += 2; в цикл while.Происходит то, что 'X' всегда вставляется в позицию 1 (позицию после первой ~).

Кроме того, вы слишком усложняете использование Insert и всех этих индексов.RepeatTime и ZeroPosition имеют одинаковое значение, поэтому вам не нужны оба.

Вы можете использовать StringBuilder .Append(), чтобы добавить текст в конец строки.Я использовал интерполяцию ${var} и предположил numberHalf = 3, но это должно делать то, что вы хотите:

    StringBuilder repeatIndexes = new StringBuilder();
    int numberHalf = 3;
    // int repeatTime = 0;
    while (numberHalf > 0)
    {
        // replace below line with your char in array
        char insertThis = 'X'; //indexJustForRepetas[IndexOfIndexes[repeatTime]];   
        repeatIndexes.Append($"~{insertThis}");
        // repeatTime += 1 // needed for array call above. +1 or +2 depending on your intention
        numberHalf = numberHalf - 1;
    }
    var outString = repeatIndexes.ToString();


    output:
    ~X~X~X

Вы можете разбить строку repeatIndexes.Append($"~{insertThis}") на 2, если вы предпочитаете:

repeatIndexes.Append("~");
repeatIndexes.Append(insertThis);
...