Помогите решить задачку!

nvv

Client
Регистрация
05.12.2019
Сообщения
18
Благодарностей
2
Баллы
3
Всем доброго времени суток!
Есть такая задача: Переменная содержит набор из 26 цифр (одна цифра + 5 блоков по 5 цифр): 3 58635 95478 36254 32141 36581. Надо взять первую цифру и найти ее порядковый номер в первом блоке из 5-ти цифр, в данном случае она будет "четвертая" (58635). Далее в следующих четырех блоках надо найти все "четвертые" по порядку цифры, это будет "7", "5", "4" и "8" (3 58635 95478 36254 32141 36581). На выходе должны получить ответ 37548.
Как это сделать на C# для меня пока загадка))
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
расплитовать по пробелу string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
через функцию indexof найти номер вхождения int indexOfSubstring = words[1].IndexOf(words[0]);
через Substring вырезать нужное вхождение в каждом блоке
string text_1 = words[1].Substring(indexOfSubstring ,1);
string text_2 = words[2].Substring(indexOfSubstring ,1);
......
склеить string res = text_1 +text_2 +....
 
  • Спасибо
Реакции: nvv

nvv

Client
Регистрация
05.12.2019
Сообщения
18
Благодарностей
2
Баллы
3
расплитовать по пробелу string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
через функцию indexof найти номер вхождения int indexOfSubstring = words[1].IndexOf(words[0]);
через Substring вырезать нужное вхождение в каждом блоке
string text_1 = words[1].Substring(indexOfSubstring ,1);
string text_2 = words[2].Substring(indexOfSubstring ,1);
......
склеить string res = text_1 +text_2 +....
Пробелов нет. Я для наглядности подал с блоками. Переменная содержит набор из 26 цифр без пробелов. Может за вознаграждение быстро черканете код?))
 
Последнее редактирование:

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
272
Баллы
63
Вот так, например:

C#:
var test = "35863595478362543214136581";
var sb = new StringBuilder();
var firstNum = test.Substring(0, 1);
var numIndex = test.IndexOf(firstNum, 1, 5);
sb.Append(firstNum);
if(numIndex != -1)
{
    var arrStartInd = new []{5, 10, 15, 20};
    foreach(var startInd in arrStartInd)
    {
        sb.Append(test.Substring(startInd + numIndex, 1));
    }
}
return sb;
 
  • Спасибо
Реакции: doc и nvv

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
  • Спасибо
Реакции: doc

nvv

Client
Регистрация
05.12.2019
Сообщения
18
Благодарностей
2
Баллы
3
Вот так, например:

C#:
var test = "35863595478362543214136581";
var sb = new StringBuilder();
var firstNum = test.Substring(0, 1);
var numIndex = test.IndexOf(firstNum, 1, 5);
sb.Append(firstNum);
if(numIndex != -1)
{
    var arrStartInd = new []{5, 10, 15, 20};
    foreach(var startInd in arrStartInd)
    {
        sb.Append(test.Substring(startInd + numIndex, 1));
    }
}
return sb;
Все работает как часы!) Я новичок в этой теме и для меня это, как магия!
 

Metrix

Client
Регистрация
03.01.2014
Сообщения
343
Благодарностей
272
Баллы
63
Ну зачем так хардкордить, если можно счетчик +5 увеличивать?
Это лишь одно из решений, +5 - это тоже хардкод будет :-)
Утренняя разминка мозгов, уверен, что код можно ещё улучшить.

Все работает как часы!) Я новичок в этой теме и для меня это, как магия!
Отлично!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)