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

Класс для работы с массивом строк

20.12.2009, 20:58. Показов 8793. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток.
Имеется задача
Описать класс для работы с одномерным массивом строк фиксированной длины.
Обеспечить следующие возможности:
• задание произвольных целых границ индексов при создании объекта;
• обращение к отдельной строке массива по индексу с контролем выхода за пределы массива
• выполнение операций поэлементного сцепления двух массивов с образованием нового массива*
• выполнение операций слияния двух массивов с исключением повторяющих*ся элементов
• вывод на экран элемента массива по заданному индексу и всего массива.
Написать программу, демонстрирующую все разработанные элементы класса.

Подскажите пожалуйста, как создать конструктор для данного класса. Массив пробовал создать так - public string[] stroka. Но ничего не получается. Может лучше использовать строки типа StringBuilder? Все упирается в конструктор данного класса...Остальное (все методы, свойства) могу реализовать сам.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2009, 20:58
Ответы с готовыми решениями:

Описать класс для работы с одномерным массивом строк фиксированной длинны
Здравствуйте!Я запуталась,помогите! Описать класс для работы с одномерным массивом строк фиксированной длинны. Обеспечить следующие...

Описать класс для работы с одномерным массивом строк фиксированной длинны
Описать класс для работы с одномерным массивом строк фиксированной длинны. Обеспечить следующие возможности: Задание произвольных...

Описать класс для работы с одномерным массивом строк фиксированной длины
По заданию нужно Описать класс для работы с одномерным массивом строк фиксированной длины. Не совсем понимаю, каким образом можно...

9
56 / 55 / 7
Регистрация: 17.03.2009
Сообщений: 112
21.12.2009, 18:33
В конструктор надо передавать сам массив (ну или два массива). В самом классе объявить эти два массива без инициализации. А инициализацию произвести в конструкторе. Например:
C#
1
2
3
4
5
6
7
8
9
10
11
public class MyClass
{
      private string[] stroka1;
      private string[] stroka2;
 
      public MyClass(string[] stroka1, string[] stroka2)
        {
              this.stroka1 = stroka1;
              this.stroka2 = stroka2;
        }        
}
Дальше уже в писать методы. А сами массивы передавать из программы, демонстрирующей возможности класса.
1
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 5
21.12.2009, 19:25  [ТС]
Спасибо.
А вот как только теперь (если оба массива типа string) работать с индексами? Это ведь тип int... Или это можно прям в методах и описать?
0
56 / 55 / 7
Регистрация: 17.03.2009
Сообщений: 112
21.12.2009, 19:47
у всех массивов есть индексы. Если в метод передавать индекс, то можно получить элемент под этим индексом. Наприер:
C#
1
2
3
4
public string getStringByIndex(int index)
{
   return stroka1[index];
}
p.s. не забываем про кнопку "Спасибо"
2
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 5
21.12.2009, 21:23  [ТС]
Спасибо большое за помощь! Попробую теперь все это реализовать.

Добавлено через 1 час 30 минут
К сожалению ничего не получается. Вот примерно как я делаю:
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
 public class MyClass
    {
        private string[] stroka;
        private int hInd; //индекс
 
        // конструктор
        public MyClass(string[] stroka, int Ind)
        {
            this.stroka = stroka;
            hInd = Ind;
        }
        //получение значения по индексу
        public string getStringByIndex(int index)
        {
            return stroka[index];
        }
 
        //задание произвольных целых границ индексов при создании объекта
        public int hIndex
        {
            get { return hInd; }
        }
 
        //обращение к отдельной строке массива по индексу с контролем выхода за пределы массива
        public double this[int NumOfElement]
        {
            get
            {
                if (NumOfElement >= hIndex) { throw new IndexOutOfRangeException(); }
                else
                    return ???????;
            }
            set
            {
                if (NumOfElement >= hIndex)
                { throw new IndexOutOfRangeException(); }
                else
                    stroka[NumOfElement] = ??????;
            }
        }
Вот как мне вернуть строки массива (где стоят знаки вопроса в коде)? Или у меня неправильная логика?
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
21.12.2009, 21:44
ИМХО попробуй так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public double this[int NumOfElement]
        {
            get
            {
                if (NumOfElement >= hIndex) { throw new IndexOutOfRangeException(); }
                else
                    return string[NumOfElement];
            }
            set
            {
                if (NumOfElement >= hIndex)
                { throw new IndexOutOfRangeException(); }
                else
                    stroka[NumOfElement] = value;
            }
        }
1
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 5
21.12.2009, 22:17  [ТС]
Я так пробовал, но получается "неявное преобразование типов". В этом то и проблема, что работа с массивом СТРОК, а все методы будут основаны на работе с индексами. Везде вылезают ошибки с типами данных
0
8 / 8 / 2
Регистрация: 20.02.2009
Сообщений: 139
22.12.2009, 13:51
Коляныч,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public double this(int NumOfElement)
        {
            get
            {
                if (NumOfElement >= hIndex) { throw new IndexOutOfRangeException(); }
                
                else
                {
                    return /*здесь надо вызвать функцию которая возвращает тебе значение это - */getStringByIndex(NumOfElement);
                }
            }
            set
            {
                if (NumOfElement >= hIndex)
                { throw new IndexOutOfRangeException(); }
                else
                    {
                    stroka(NumOfElement) = value; //ну эт должно работать хотя тебе надо преобразовать из double в string
                    }
            }
        }
Я думаю небольшие поправки в коде тебе помогут.
ПСЖ: Разве, для передачи функции значения можно использовать квадратные скобки?
1
56 / 55 / 7
Регистрация: 17.03.2009
Сообщений: 112
22.12.2009, 17:09
Ну я могу сказать, что ты очень сильно запутался в свойствах и конструкторе.
Переменная hInd - нужна тебе для произвольного задания размера массива и проверки, не выходит ли индекс обращения за пределы границ.
Вот как должно быть:

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
 public class MyClass
    {
        private string[] stroka;
        private int hInd; //индекс
 
        // конструктор
// учитывая, что размер массива, с которым ты работаешь, может быть задан произвольно и размер массива, передаваемого в конструктор, и данного массива может быть разным, заполнять данный массив необходимо в конструкторе используя цикл for.
        public MyClass(string[] stroka, int Ind)
        {
            this.stroka = new string[Ind];
            for(int i = 0;i<Ind;i++)    
            {
                  this.stroka[i] = stroka[i];
            }
            hInd = Ind;
        }
        //получение значения по индексу
       public string getStringByIndex(int index)
        {
            string founded = null;
            if(index>=hInd)
            {
               throw new IndexOutOfRangeException();
            }
            else
            {
              founded = stroka[index];
            }
            return founded;
        }
 
        //задание произвольных целых границ индексов при создании объекта
        public int hIndex
        {
            get 
              {
                 return hInd; // получение произвольных границ
              }
            set
              {
                 this.hInd = value; // Задание произвольных границ  
              }
        }
 
      }
Обращение к элементу по индексу (как ты это написал) - абсолютно не правильно.
Во первых это ни в коем случае не свойство, а метод. Я бы даже сказал, что это 2 разных метода. Один для получения элемента, другой для задания.
Первый метод у тебя написан правильно (для получения). Но в нем ты не проверяешь не выходит ли индекс за пределы границ. Я это поправил.
А второй метод выглядет так:
C#
1
2
3
4
5
6
7
8
9
 //обращение к отдельной строке массива по индексу с контролем выхода за пределы массива
        public void setStringByIndex(int NumOfElement, string value)
        {                
                if (NumOfElement >= hIndex)
                { throw new IndexOutOfRangeException(); }
                else
                    stroka[NumOfElement] = value;
            
        }
в Этот метод тебе надо передавать 2 параметра. 1 - индекс элемента, который ты собираешься изменить, 2 - значение, которое должно быть присовено этому элементу.
Таким образом, все что ты пытался реализовать должно выглядеть так:
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
51
52
53
public class MyClass
    {
        private string[] stroka;
        private int hInd; //индекс
 
        // конструктор
        public MyClass(string[] stroka, int Ind)
        {
            this.stroka = new string[Ind];
            for(int i = 0;i<Ind;i++)    
            {
                  this.stroka[i] = stroka[i];
            }
            hInd = Ind;
        }
        //получение значения по индексу
        public string getStringByIndex(int index)
        {
            string founded = null;
            if(index>=hInd)
            {
               throw new IndexOutOfRangeException();
            }
            else
            {
              founded = stroka[index];
            }
            return founded;
        }
 
        //задание произвольных целых границ индексов при создании объекта
        public int hIndex
        {
            get 
              {
                 return hInd; // получение произвольных границ
              }
            set
              {
                 this.hInd = value; // Задание произвольных границ  
              }
        }
       //Изменение значения элемента по индексу
       public void setStringByIndex(int NumOfElement, string value)
        {                
                if (NumOfElement >= hIndex)
                { throw new IndexOutOfRangeException(); }
                else
                    stroka[NumOfElement] = value;
            
        }
 
      }
Обращение к элементу предполагает его получение и изменение его значения.

Кстати, в своействе задания произвольных границ у тебя недочет. У тебя значение меняется только для переменной hInd, а сам массив остается неизменным. Т.е. если я скажем задам значение hInd больше чем оно было, в последствии это вызовет крах программы с ошибкой IndexOutOfRangeException.
Подумай над тем как тебе эту проблему решить.
1
0 / 0 / 0
Регистрация: 20.12.2009
Сообщений: 5
22.12.2009, 18:58  [ТС]
Спасибо!
А не могли бы вы подправить код для следующих заданий (сцепление массивов, слияние массивов исключая повторения). Я их реализовал. Для массивов целых чисел у меня это заработало, но вот со строками.....

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
 //поэлементное сцепление массивов
        public static MyClass operator +(?????,??????) // тут должно быть объявлено 2 массива, которые надо сцепить.. можно ли это сделать так - (MyClass x, MyClass y)?
        {
            MyClass scep = new MyClass(x.hInd, y.hInd); // 
            for (int i = 0; i < scep.hInd; i++)
            {
                scep[i] = x[i] + y[i];
            }
            return scep;
        }
 
        //слияние двух массивов с исключением повторяющихся элементов
        public static MyClass operator *(????, ????)
        {
            MyClass sl = new MyClass(x.hInd, y.hInd);
            // запись элементов массива х в новый массив sl
            for (int i = 0; i < sl.hInd; i++)
            {
                sl[i] = x[i];
            }
 
 
            // запись элементов массива у в массив sl (исключая совпадения)
            for (int j = 0; j <= y.hInd; j++)
            {
                bool flag = false;
                for (int i = 0; i <= sl.????; i++)
                {
                    if (y[j] == sl[i]) flag = true;
                }
                if (flag == false) sl[j + 1] = y[j];
 
                return sl;
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2009, 18:58
Помогаю со студенческими работами здесь

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие возможности: • задание произвольных...

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие возможности: • задание произвольных...

Описать класс для работы с одномерным массивом строк фиксированной длины
Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить следующие возможности: • задание произвольных целых...

Описать класс для работы с одномерным массивом строк фиксированной длины
помогите пожалуйста!) Описать класс для работы с одномерным массивом строк фиксированной длины. Обеспечить: o Задание произвольных...

Описать класс для работы с одномерным массивом строк фиксированной длины
Нужна помощь в решении задачи, по возможности с объяснением, т.к. я ее совсем не понимаю. Заранее благодарю. Описать класс для работы с...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru