Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 25

Написать и протестировать метод, который "сжимает" строку

30.01.2019, 20:42. Показов 2261. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, помогите решить задачку: Написать и протестировать метод, который "сжимает" строку, удаляя из нее каждый второй элемент.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.01.2019, 20:42
Ответы с готовыми решениями:

Написать и протестировать метод, который заменяет каждый второй элемент в строке на заданный символ
Написать и протестировать метод, который в строке, передаваемой ей в качестве параметра, заменяет каждый второй элемент на заданный символ.

Написать и протестировать функцию compress(), которая "сжимает" строку, удаляя из нее все пробелы.
Добрый вечер))не могли бы вы мне помочь с задачками,они в принципе лёгкие ,мы только начали изучать Си++ ,но я уже не понимаю,если не...

Функция: Написать и протестировать функцию, которая "сжимает" строку, удаляя из неё все пробелы.
Тема "Нестандартные функции" Написать и протестировать функцию, которая "сжимает" строку, удаляя из неё все пробелы. Символьная...

16
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
31.01.2019, 00:35
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Text;
 
namespace Draft13
{
    internal class Program
    {
        private static void Main()
        {
            string longString = "aabbccddee112233";
            string shortString = StringСompression(longString);
 
            Console.WriteLine(longString);
            Console.WriteLine(shortString);
 
            Console.ReadKey();
        }
 
        private static string StringСompression(string longString)
        {
            StringBuilder shortString = new StringBuilder();
 
            for (int i = 0; i < longString.Length; i += 2)
            {
                shortString.Append(longString[i]);
            }
 
            return shortString.ToString();
        }
    }
}


Цитата Сообщение от Bananovich1 Посмотреть сообщение
протестировать метод
Что подразумевается - написать юнит-тест или просто сделать проверку, что конечная строка стала короче в два раза по сравнению от первоначальной?
1
0 / 0 / 0
Регистрация: 28.01.2019
Сообщений: 25
31.01.2019, 08:27  [ТС]
willow300, что конечная строка стала в 2 раза короче.
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
31.01.2019, 14:50
Цитата Сообщение от Bananovich1 Посмотреть сообщение
что конечная строка стала в 2 раза короче
т.е. если в строке 5 символов, то в итоге должно остаться 2.5 символа?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,982
Записей в блоге: 236
31.01.2019, 20:04
Цитата Сообщение от Bananovich1 Посмотреть сообщение
и протестировать метод
I will help you to write tests.

Unit under test:

Kata.cs

C#
1
2
3
4
5
6
7
8
9
10
namespace DeleteEverySecondElement
{
    public class Kata
    {
        public static string DeleteEverySecondElement(string text)
        {
            return null;
        }
    }
}
The first test is green:

1. DeleteEverySecondElement_EmptyInputStrin g_ReturnsNull

KataTests.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using NUnit.Framework;
using DeleteEverySecondElement;
 
namespace DeleteEverySecondElement_UnitTests
{
    [TestFixture]
    public class KataTests
    {
        [Test]
        public void DeleteEverySecondElement_EmptyInputString_ReturnsNull()
        {
            // Arrange
            string input = "";
            string expected = null;
 
            // Act
            string actual = Kata.DeleteEverySecondElement(input);
 
            // Assert
            Assert.AreEqual(expected, actual);
        }
    }
}
Project was created in VS2015:
Вложения
Тип файла: zip DeleteEverySecondElement_NUnitCSharp.zip (216.5 Кб, 0 просмотров)
1
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
31.01.2019, 21:37
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Func(string str)
        {
            for (int i = 0; i < str.Length; i ++)
            {
                if (i % 2 == 0)
                {
                    Console.Write(str[i]);
                }
                else
                { Console.Write(""); }
            }
           
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите строку");
            string str;
            str = Convert.ToString(Console.ReadLine());
            
            Func(str);
            Console.ReadLine();
Добавлено через 2 минуты
Если создавать метод, то такой,что бы он не содержал других методов.
1
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
31.01.2019, 23:06
Цитата Сообщение от Bananovich1 Посмотреть сообщение
что конечная строка стала в 2 раза короче.
Перед 16й строкой добавьте.
C#
1
2
3
4
5
6
7
8
9
            if (longString.Length % 2 == 0 && longString.Length / 2 == shortString.Length ||
                longString.Length % 2 != 0 && longString.Length / 2 == shortString.Length - 1)
            {
                Console.WriteLine("Сокращение выполнено корректно.");
            }
            else
            {
                Console.WriteLine("Во время сокращения произошла ошибка.");
            }
1
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,982
Записей в блоге: 236
31.01.2019, 23:20
Цитата Сообщение от valera_21 Посмотреть сообщение
т.е. если в строке 5 символов, то в итоге должно остаться 2.5 символа?
input = "cyber"
result == "cb" == true ?

Добавлено через 3 минуты
Цитата Сообщение от Bananovich1 Посмотреть сообщение
что конечная строка стала в 2 раза короче.
input = "w"
result == "w" == true ?

Добавлено через 1 минуту
Last question with the empty string:

input = ""
result == null == true ?
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
01.02.2019, 00:18
Цитата Сообщение от 8Observer8 Посмотреть сообщение
input = "cyber"
result == "cb" == true ?
В задании требуется удалить каждый второй символ. Поэтому скорее cbr

Цитата Сообщение от 8Observer8 Посмотреть сообщение
input = ""
result == null == true ?
Возращать null в ответ на пустую строку плохая идея.
0
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
01.02.2019, 01:04
Мой вариант более подходящий
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
01.02.2019, 01:12
Макрой, нет. Решение willow300 лучше твоего.
0
64 / 45 / 20
Регистрация: 04.12.2018
Сообщений: 334
01.02.2019, 01:43
Мое имеет место быть и думаю что оно одно из лучших
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,982
Записей в блоге: 236
01.02.2019, 10:59
I use willow300's solution. But I will add some things.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Возращать null в ответ на пустую строку плохая идея.
I think an exeption will be better then null.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Text;
 
public class Kata
{
    public static string StringСompression(string longString)
    {
        StringBuilder shortString = new StringBuilder();
 
        if (string.IsNullOrEmpty(longString))
        {
            throw new ArgumentException("Input argument is empty");
        }
 
        for (int i = 0; i < longString.Length; i += 2)
        {
            shortString.Append(longString[i]);
        }
 
        return shortString.ToString();
    }
}
I fixed it with two unit test: "" and null:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using NUnit.Framework;
using System;
 
namespace StringСompression_UnitTests
{
    [TestFixture]
    public class KataTests
    {
        [Test]
        public void StringСompression_EmptyInputString_Throws()
        {
            // Arrange
            string input = "";
 
            // Act
            var ex = Assert.Throws<ArgumentException>(() => Kata.StringСompression(input));
 
            // Assert
            StringAssert.Contains("Input argument is empty", ex.Message);
        }
 
        [Test]
        public void StringСompression_NullInputString_Throws()
        {
            // Arrange
            string input = null;
 
            // Act
            var ex = Assert.Throws<ArgumentException>(() => Kata.StringСompression(input));
 
            // Assert
            StringAssert.Contains("Input argument is empty", ex.Message);
        }
    }
}
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
01.02.2019, 13:06
Цитата Сообщение от 8Observer8 Посмотреть сообщение
I think an exception will be better than null.
Я бы не бросал исключение, а возвращал null для если передан null и пустую строку если передана пустая строка.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
But I will add some things.
Почему бы не указать длину для StringBuilder?
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,982
Записей в блоге: 236
01.02.2019, 14:49
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему бы не указать длину для StringBuilder?
I don't understand. Could you explain me?

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Я бы не бросал исключение, а возвращал null для если передан null и пустую строку если передана пустая строка.
Okey. Maybe can we make another improvements?

Kata.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Text;
 
public class Kata
{
    public static string StringСompression(string longString)
    {
        StringBuilder shortString = new StringBuilder();
 
        if (longString == "")
        {
            return "";
        }
 
        if (longString == null)
        {
            return null;
        }
 
        for (int i = 0; i < longString.Length; i += 2)
        {
            shortString.Append(longString[i]);
        }
 
        return shortString.ToString();
    }
}
KataTests.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using NUnit.Framework;
 
namespace StringСompression_UnitTests
{
    [TestFixture]
    public class KataTests
    {
        [Test]
        public void StringСompression_EmptyInputString_Throws()
        {
            // Arrange
            string input = "";
            string expected = "";
 
            // Act
            string actual = Kata.StringСompression(input);
 
            // Assert
            Assert.AreEqual(expected, actual);
        }
 
        [Test]
        public void StringСompression_NullInputString_Throws()
        {
            // Arrange
            string input = null;
            string expected = null;
 
            // Act
            string actual = Kata.StringСompression(input);
 
            // Assert
            Assert.AreEqual(expected, actual);
        }
    }
}
Добавлено через 10 минут
I made mistakes here:
C#
1
2
3
4
5
6
7
8
9
        if (longString == "")
        {
            return null;
        }
 
        if (longString == null)
        {
            return "";
        }
But I ran tests and I saw where I made mistakes. I edited my message.
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18294 / 14218 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 1
01.02.2019, 15:18
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему бы не указать длину для StringBuilder?
I don't understand. Could you explain me?
У StringBuilder есть конструктор принимающий int capacity - начальную емкость. Полезно использовать в ситуации когда заранее точно (или даже примерно) известна длина итоговой строки. Как в данном случае.
1
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,982
Записей в блоге: 236
01.02.2019, 16:07
Цитата Сообщение от OwenGlendower Посмотреть сообщение
(или даже примерно)
I think it is right:
C#
1
StringBuilder shortString = new StringBuilder(longString.Length / 2 + 1);
I wrote an executable specification in the form of unit tests:

input = null
result == null

input = ""
result == ""

input = "a"
resut == "a"

input = "ab"
result == "a"

input = "abc"
result == "ac"

input = "abcd"
result = "ac"

input = "abcde"
result = "ace"

I wrote them in the form of parameterized tests:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        [TestCase ("a", "a")]
        [TestCase("ab", "a")]
        [TestCase("abc", "ac")]
        [TestCase("abcd", "ac")]
        [TestCase("abcde", "ace")]
        public void StringCompression_VariousInputs_CheckThem(
            string inputString, string expectedString)
        {
            // Act
            string actualString = Kata.StringСompression(inputString);
 
            // Assert
            Assert.AreEqual(expectedString, actualString);
        }
Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
 
namespace StringCompression
{
    class Program
    {
        static void Main(string[] args)
        {
            // Input string
            string input = "abcde";
 
            // Short string
            string shortString = Kata.StringСompression(input);
 
            // Show the result
            Console.WriteLine("Long string: " + input);
            Console.WriteLine("Short string: " + shortString);
 
            // Pause console
            Console.ReadKey();
        }
    }
}
Kata.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System.Text;
 
public class Kata
{
    public static string StringСompression(string longString)
    {
        if (longString == null)
        {
            return null;
        }
 
        if (longString == "")
        {
            return "";
        }
 
        StringBuilder shortString = new StringBuilder(longString.Length / 2 + 1);
 
        for (int i = 0; i < longString.Length; i += 2)
        {
            shortString.Append(longString[i]);
        }
 
        return shortString.ToString();
    }
}
KataTests.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using NUnit.Framework;
 
namespace StringСompression_UnitTests
{
    [TestFixture]
    public class KataTests
    {
        [Test]
        public void StringСompression_NullInputString_Throws()
        {
            // Arrange
            string input = null;
 
            // Act
            string actual = Kata.StringСompression(input);
 
            // Assert
            Assert.IsNull(actual);
        }
 
        [Test]
        public void StringСompression_EmptyInputString_Throws()
        {
            // Arrange
            string input = "";
            string expected = "";
 
            // Act
            string actual = Kata.StringСompression(input);
 
            // Assert
            Assert.AreEqual(expected, actual);
        }
 
        [TestCase ("a", "a")]
        [TestCase("ab", "a")]
        [TestCase("abc", "ac")]
        [TestCase("abcd", "ac")]
        [TestCase("abcde", "ace")]
        public void StringCompression_VariousInputs_CheckThem(
            string inputString, string expectedString)
        {
            // Act
            string actualString = Kata.StringСompression(inputString);
 
            // Assert
            Assert.AreEqual(expectedString, actualString);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2019, 16:07
Помогаю со студенческими работами здесь

Написать и протестировать функцию compress(), которая "сжимает" строку, удаляя из нее все пробелы.
Приветик всем.Немогли бы вы мне написать эти 2 програмки Написать и протестировать функцию compress(), которая &quot;сжимает&quot;...

Написать и протестировать функцию compress(), которая сжимает массив, удаляя из него элементы равные числу
Написать и протестировать функцию compress(), которая сжимает массив, удаляя из него элементы равные числу, введенному с клавиатуры....

Написать метод, который принимает строку и шифрует ее
Написать метод, который принимает строку и шифрует эту строку(смещение кода символов на 1 вправо). Добавлено через 2 часа 41 минуту ...

Написать метод, который выводит на экран строку
Всем привет! Помогите пожалуйста с домашним заданием. Вот оно: Написать метод, который выводит на экран строку. Символы из которых...

Написать метод, который разделяет переданную строку на две отдельных строки
Написать метод, который разделяет переданную строку на две отдельных строки: первая содержит исходную строку до первой точки, а вторая –...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru