Переписать класс одномерных массивов строк из C++ в C#
Формулировка задачи:
Всем доброго времени суток, поступило задание переделать готовый код на с++ в код на с#, изучение данного языка началось на этой неделе и мягкого говоря я нулёвый, буду очень признателен помощи
Условие: Составить описание класса одномерных массивов строк, каждая строка задается
длиной и указателем на выделенную для нее память. Предусмотреть возмож*
ность обращения к отдельным строкам массива по индексам, контроль выхода
за пределы массивов, выполнения операций поэлементного сцепления двух
массивов с образованием нового массива, слияния двух массивов с исключением
повторяющихся элементов, вывод на экран элемента массива и всего массива.
Написать программу, демонстрирующую работу с этим классом. Программа
должна содержать меню, позволяющее осуществить проверку всех методов класса.
вот код на с++
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <iomanip>
#include <math.h>
#include <locale>
using namespace std;
class Massiv
{
int *a, *d, n, min;
public:
void Sozd();
void Vvod_Sl();
void Form(int n1, int n2);
void Form_2(int n3, int n4);
void Print();
void Print_2(int number);
void Print_3(int rec, int field);
};
void Massiv::Sozd() //Создание массива строк
{
int m;
cout << " Количество строк = "; cin >> n;
int min = 0;
for (int i = 0; i < n; i++)
{
d = (int* ) malloc (sizeof(int) *n *min);
cout << " Количество элементов " << i + 1 << " в строке= ";
cin >> m;
*(d + i) = m;
if (min < m) min = m;
}
a = (int*) malloc (sizeof(int) *n *min);
}
void Massiv::Vvod_Sl() // Ввод случайных чисел в массив строк
{
Sozd();
for (int i = 0; i < n; i++)
for (int j = 0; j < *(d + i); j++)
{
*(a + i + j) = rand() % 100;
}
}
void Massiv::Print() //Вывод всех строк
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < *(d + i); j++)
{
cout << setw(6) << *(a + i + j);
}
cout << endl;
}
}
void Massiv::Print_2(int number) //Вывод строк по индексу
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < *(d + i); j++)
{
if (i == number) cout << setw(6) << *(a + i + j);
}
cout << endl;
}
}
void Massiv::Print_3(int rec, int field) //Ввывод конкретного елемента конкретной строки
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < *(d + i); j++)
{
if ((i == rec) && (j == field)) cout << "Даный элемент= " << setw(6) << *(a + i + j);
else "Массив с такими даннымы не найден!";
}
cout << endl;
}
}
void Massiv::Form(int n1, int n2) //Сцепление двух массивов
{
int m1, m2, k, j, l, p;
int c [20];
m1 = *(d + n1);
m2 = *(d + n2);
int m3 = m1 + m2;
k = 0;
for (l = 0; l < m3; l++)
if (l < m1)
{
c[l] = *(a + n1 + l);
cout << setw(6) << c[l];
}
else if ((l >= m1) && (l < m3))
{
c[l] = *(a + n2 + k);
cout << setw(6) << c[l];
k++;
}
}
void Massiv::Form_2(int n3, int n4) //Слияние двух массивов
{
int m1, m2, k, j, l, p, l1;
int c[20], f[20];
m1 = *(d + n3);
m2 = *(d + n4);
int m3 = m1 + m2;
k = 0;
for (l = 0; l < m3; l++)
{
if (l < m1)
{
c[l] = *(a + n3 + l);
}
else if ((l >= m1) && (l < m3))
{
c[l] = *(a + n4 + k);
k++;
}
}
l1 = 0;
f[l1] = c[l1];
cout << setw(6) << f[l1];
for (p = 1; p < m3; p++)
if (f[l1] != c[p])
{
l++;
f[l1] = c[p];
cout << setw(6) << f[l1];
}
}
void main()
{
setlocale(LC_ALL, "Russian");
Massiv a, b;
int number, punkt, rec, field, kol, n1, n2, n, n3, n4;
cout << "1 - Создание массива "; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt;
while (punkt != 7) //Меню
{
switch (punkt)
{
case 1: {
a.Vvod_Sl();
cout << endl;
a.Print();
cout << endl;
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt;
}
break;
case 2: {
a.Print();
cout << endl;
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt; }
break;
case 3: {
cout << "Введите номер массива (нумерация начинается с 0!): "; cin >> number;
cout << endl;
a.Print_2(number);
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt;
}
break;
case 4: {
cout << "Введите номер 1-го массива (нумерация начинается с 0!!!): "; cin >> n1; cout << endl;
cout << "Введите номер 2-го массива (нумерация начинается с 0!!!): "; cin >> n2; cout << endl;
a.Form(n1, n2);
cout << endl;
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt; }
break;
case 5: {
cout << "Введите номер 1-го массива (нумерация начинаеться с 0!!!): "; cin >> n3; cout << endl;
cout << "Введите номер 1-го массива (нумерация начинаеться с 0!!!): "; cin >> n4; cout << endl;
a.Form_2(n3, n4);
cout << endl;
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух масивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt; }
break;
case 6: {
cout << "Введите номер строки массива(нумерацыия начинаеться с 0!): "; cin >> rec;
cout << endl;
cout << "Введите номер столбца: "; cin >> field;
cout << endl;
a.Print_3(rec, field);
cout << "1 - Создание массива"; cout << endl;
cout << "2 - Вывод всех строк"; cout << endl;
cout << "3 - Вывод строки по индексу"; cout << endl;
cout << "4 - Сцепление двух массивов"; cout << endl;
cout << "5 - Слияние двух массивов"; cout << endl;
cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
cout << "7 - Выход"; cout << endl;
cout << "Выберете пункт в меню: "; cin >> punkt; }
break;
case 7:
break;
system("pause");
}
}
}Решение задачи: «Переписать класс одномерных массивов строк из C++ в C#»
textual
Листинг программы
class StringArray
{
private string[] strings;
public StringArray()
{ }
public StringArray(int count)
{
strings = new string[count];
}
public string this[int index]
{
get { return strings[index]; }
set { strings[index] = value; }
}
public char this[int stringIndex, int charIndex]
{
get { return strings[stringIndex][charIndex]; }
}
public static StringArray operator+(StringArray a, StringArray b)
{
StringArray newStrings = new StringArray();
newStrings.strings = a.strings.Concat(b.strings).ToArray();
return newStrings;
}
public StringArray Union(StringArray b)
{
StringArray newStrings = new StringArray();
newStrings.strings = strings.Union(b.strings).ToArray();
return newStrings;
}
public override string ToString()
{
return String.Join(", ", strings);
}
}
class Program
{
static void Main(string[] args)
{
StringArray a = new StringArray(3);
a[0] = "one";
a[1] = "two";
a[2] = "three";
StringArray b = new StringArray(4);
b[0] = "two";
b[1] = "three";
b[2] = "four";
b[3] = "five";
Console.WriteLine("A: {0}", a);
Console.WriteLine("B: {0}", b);
Console.WriteLine("Concat: {0}", a+b);
Console.WriteLine("Union: {0}", a.Union(b));
Console.WriteLine("B[2]: {0}", b[2]);
Console.WriteLine("B[2][2]: {0}", b[2, 2]);
Console.ReadKey();
}
}