JZ_52

Пользователь

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

JZ_52

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

img

Привет всем! Не могу выполнить данное задание. Да, знаю что этот форум программистов, но на таких форумах, мой вопрос удаляют, потому что на него "есть" ответ.

Спойлер: "Задание"

Выполнить задание используя классы System.Char и System.String

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов

P.S: Посмотрел все методы. Но методов, которые нужны мне, я не нашёл.

Спойлер: "Мой код"

int count = 0;

string str = textBox.Text;

string[] str1 = str.Split(' ');

for (int i = 0; i < str1.Length; i++)

{

if(i % 2 == 0)

{

break;

}

else

{

if (i == 1)

{

count++;

}

}

textBox1.Text += "Количество едениц: " + Convert.ToString(count);

}

Vkusnii4ai

Пользователь

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

Vkusnii4ai

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

Можно пример строки? И как она разделяется на группы?

S0_HardCore

Пользователь

Регистрация: 01.07.2014

Сообщения: 3462

Рейтинг: 2905

S0_HardCore

Регистрация: 01.07.2014

Сообщения: 3462

Рейтинг: 2905

JZ_52 сказал(а):

Привет всем! Не могу выполнить данное задание. Да, знаю что этот форум программистов, но на таких форумах, мой вопрос удаляют, потому что на него "есть" ответ.

Спойлер: "Задание"

Выполнить задание используя классы System.Char и System.String

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов

P.S: Посмотрел все методы. Но методов, которые нужны мне, я не нашёл.

Нажмите, чтобы раскрыть...

Есть .Count() в LINQ, в который передаешь своё условие.

Но я думаю что задача запрещает это использовать и хочет от тебя решения вручную через цикл.

 

Что за группы? Все цифры находятся в одной строке? Вроде "111000011100001110000"?

JZ_52

Пользователь

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

JZ_52

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

img
S0_HardCore сказал(а):

Есть .Count() в LINQ, в который передаешь своё условие.

Но я думаю что задача запрещает это использовать и хочет от тебя решения вручную через цикл.

 

Что за группы? Все цифры находятся в одной строке? Вроде "111000011100001110000"?

Нажмите, чтобы раскрыть...

Скорее всего, что "00011 01101001 0011010", что-то в таком духе. И вот если после пробела нечётное количество символов, я должен посчитать 1.

Char1sma

Пользователь

Регистрация: 11.10.2012

Сообщения: 15007

Рейтинг: 8410

Нарушения: 50

Char1sma

Регистрация: 11.10.2012

Сообщения: 15007

Рейтинг: 8410

Нарушения: 50

Пробовал разделить строку по "01" и "10"?

Vkusnii4ai

Пользователь

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

Vkusnii4ai

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

    public int CharCountInOddGroups(string s, char c = '1', char separator = ' ')
    {
        var allGroups = s.Split(separator);
        var charCount = 0;
        foreach (var group in allGroups)
        {
            if (group.Length % 2 != 0)
                charCount += group.Split(c).Length - 1;
        }
 
        return charCount;
    }
 
// Чекай, у меня всё работает

JZ_52

Пользователь

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

JZ_52

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

img
CapCharismaPeep сказал(а):

Пробовал разделить строку по "01" и "10"?

Нажмите, чтобы раскрыть...

Нет, я просто не знаю, нужно сделать чтобы пользователь ввёл или что можно просто самому написать и посчитать. Но скорее всего, можно прописать самому.

 

Vkusnii4ai сказал(а):
    public int CharCountInOddGroups(string s, char c = '1', char separator = ' ')
    {
        var allGroups = s.Split(separator);
        var charCount = 0;
        foreach (var group in allGroups)
        {
            if (group.Length % 2 != 0)
                charCount += group.Split(c).Length - 1;
        }
 
        return charCount;
    }
 
// Чекай, у меня всё работает
Нажмите, чтобы раскрыть...

А можно без функций? У меня всё в WPF.

kure534

Пользователь

Регистрация: 09.07.2018

Сообщения: 5618

Рейтинг: 4226

kure534

Регистрация: 09.07.2018

Сообщения: 5618

Рейтинг: 4226

Не совсем понял, что за группы, но вот:

string[] a; 

for(int i=0; i < a.Length; i++){

    if(i%2 != 0){

        int b = 0;

        for(int k = 0; k < a.Length; k++){

            if(a[k] == '1'){

                b += 1;

            }

        }

        Console.WriteLine(b);

    }

}

//Надеюсь это то, что тебе нужно

//Тут ещё может быть проблема в системе счёта, т.е если начинать считать с нуля, то одни строки будут нечетными, а если 

начинать считать с единицы, то другие будут

UPD: Сорян, уже понял что за группы, это не то

JZ_52

Пользователь

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

JZ_52

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

img
kure534 сказал(а):

Не совсем понял, что за группы, но вот:

string[] a; 

for(int i=0; i < a.Length; i++){

    if(i%2 != 0){

        int b = 0;

        for(int k = 0; k < a.Length; k++){

            if(a[k] == '1'){

                b += 1;

            }

        }

        Console.WriteLine(b);

    }

}

//Надеюсь это то, что тебе нужно

//Тут ещё может быть проблема в системе счёта, т.е если начинать считать с нуля, то одни строки будут нечетными, а если 

начинать считать с единицы, то другие будут

UPD: Сорян, уже понял что за группы, это не то

Нажмите, чтобы раскрыть...

Но спасибо за помощь. Я тоже думал проверку на i сделать на чётность, но не помогло.

Char1sma

Пользователь

Регистрация: 11.10.2012

Сообщения: 15007

Рейтинг: 8410

Нарушения: 50

Char1sma

Регистрация: 11.10.2012

Сообщения: 15007

Рейтинг: 8410

Нарушения: 50

JZ_52 сказал(а):

Нет, я просто не знаю, нужно сделать чтобы пользователь ввёл или что можно просто самому написать и посчитать. Но скорее всего, можно прописать самому.

Нажмите, чтобы раскрыть...

Есть метод System.String.Split. С его помощью можно разбить исходную строку на подстроки одинаковых символов, чью длину можно подсчитать. Правда, для этого придётся немного поюзать System.Collections, но хз можно ли так.

Vkusnii4ai

Пользователь

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

Vkusnii4ai

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

var s = "0011 01110 0100101 011001 0101010";
 
var allGroups = s.Split(' ');
var charCount = 0;
foreach (var group in allGroups)
{
    if (group.Length % 2 != 0)
        charCount += group.Split('1').Length - 1;
}
 
// потом выводишь charCount как хочешь (не шарю в WPF)

12letymanet

Пользователь

Регистрация: 02.03.2014

Сообщения: 1680

Рейтинг: 888

12letymanet

Регистрация: 02.03.2014

Сообщения: 1680

Рейтинг: 888

C# не знаю, но твой алгоритм таков.

Рабиваешь строку на массив строк с помощью сплита - ты это сделал.

Далее создаешь цикл и крутишь пока не пройдешь все элементы массива - ты это сделал.

Внутри цикла делаешь еще один цикл, где будешь работать со стракой которая лежит по текущему индексу цикла, бежим по её символам и проверяешь на твое условие. 

Всё

JZ_52

Пользователь

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

JZ_52

Регистрация: 28.06.2014

Сообщения: 3892

Рейтинг: 817

img
Vkusnii4ai сказал(а):
var s = "0011 01110 0100101 011001 0101010";
 
var allGroups = s.Split(' ');
var charCount = 0;
foreach (var group in allGroups)
{
    if (group.Length % 2 != 0)
        charCount += group.Split('1').Length - 1;
}
 
// потом выводишь charCount как хочешь (не шарю в WPF)
Нажмите, чтобы раскрыть...

Прости за дизлайк(серьёзно случайно). Твой вариант работает. Ты написал как сделать, спасибо. Что такое вообще foreach?

Vkusnii4ai

Пользователь

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

Vkusnii4ai

Регистрация: 13.03.2015

Сообщения: 286

Рейтинг: 258

JZ_52 сказал(а):

Прости за дизлайк(серьёзно случайно). Твой вариант работает. Ты написал как сделать, спасибо. Что такое вообще foreach?

Нажмите, чтобы раскрыть...

Это штука вместо обычного for. С помощью неё можно запускать циклы по перечисляемым объектам (массивам и спискам). При этом индекс не используется. Можно этот цикл сделать обычным for вот так:

 
 
Но нам тут индекс особо не нужен, поэтому удобнее foreach юзать.