Разработать класс, который выполняет, указанные ниже, операции с набором строк, причем строки имеют фиксированную длину. Класс должен содержать следующие методы:
1. конструктор класса, имеет два параметра: количество строк и максимальная длина строк;
2. операцию задания строки, с заданным номером;
3. метод, который выполняет вывод заданной строки или всех строк на экран;
4. метод конкатенации (объединения) двух строк;
5. метод, который определяет наличие в наборе строк заданной строки. Этот метод должен возвращать номер этой строки в наборе( или -1 если она не найдена).
#include <iostream>
#include <cstring>
using namespace std;
class Strings
{
private:
int amount;//количество строк вцелом
int length;//длина строк
int x; //для записи возвращаемого значения функцией searchStr()
int varNumber;//номер строки, которую пользователь захочет вывести на экран
bool varConcat;//выбор пользователя (объединять строки или нет)
//указатели на начало строк, которые будут заполняться пользователем
char *str1;
char *str2;
char *str3;
char *strSearch;//для поиска заданной строки
char *strConcat;//для записи всех введенных строк в одну строку
public:
Strings()//количество строк и максимальная длина строк
{
amount = 3;//количество
length = 31;//максимальная длина
}
int searchStr()//метод, который определяет наличие в наборе строк заданной строки
{
//строка strSearch и все остальные будут заданы в методе setString()
//там же и будет вызван ткущий метод searchStr()
if (strcmp(strSearch,str1) == 0) return 1;// функция strcmp сравнит две строки и вернет 0, если они идентичны
else if(strcmp(strSearch,str2) == 0) return 2;
else if(strcmp(strSearch,str3) == 0) return 3;
else return -1;
}
void setString()// задание строки, с заданным номером;
{
str1 = new char[length];//выделяем память для строк из 30-ти символов и один символ для '\0'
str2 = new char[length];
str3 = new char[length];
strSearch = new char[length];
strConcat = new char[length*amount];//выделяем память для строки, в которую можно записать все введенные пользователем строки
for(int i = 0; i < length; i++)//заполним все строки символами \0, чтобы очистить память от ненужных значений в строках
{
str1[i] = '\0';
str2[i] = '\0';
str3[i] = '\0';
strSearch[i] = '\0';
}
for(int i = 0; i < length*amount; i++)//заполним строку символами \0
{
strConcat[i] = '\0';
}
cout << "Введите три строки (латиницей)." << endl;
for(int i = 0; i < amount; i++)
{
cout << "Введите строку №" << i+1 << " (не более 30-ти символов): ";
if(i == 0)cin.getline (str1, length);
if(i == 1)cin.getline (str2, length);
if (i == 2) cin.getline (str3, length);
}
cout << "Введите строку, номер которой хотите найти (не более 30-ти символов): ";
cin.getline (strSearch, length);
x = searchStr();//присвоим переменной х значение, которое вернет функция searchStr()
if (x == 1) cout << "\nНомер введенной Вами строки в наборе строк = 1" << endl;
else if (x == 2) cout << "\nНомер введенной Вами строки в наборе строк = 2" << endl;
else if (x == 3) cout << "\nНомер введенной Вами строки в наборе строк = 3" << endl;
else cout << "\nСтрока не найдена!!!\n\n";
}
void getString()//вывод строк на экран
{
cout << "\n\n";
cout << "Если вы хотите отобразить все строки - введите 0.";
cout << "\nЕсли вы хотите вывести на экран конкретную строку, введите ее номер (1, 2 или 3): ";
cin >> varNumber;
cout << "\n\n";
if (varNumber == 1) cout << "Строка 1: " << str1 << endl << endl;
else if (varNumber == 2) cout << "Строка 2: " << str2 << endl << endl;
else if (varNumber == 3) cout << "Строка 3: " << str3 << endl << endl;
else//в данном случае если пользователь ввел 0
{
cout << "Строка 1: " << str1 << endl << endl;
cout << "Строка 2: " << str2 << endl << endl;
cout << "Строка 3: " << str3 << endl << endl;
}
}
void concat()//метод конкатенации (объединения) строк;
{
cout << "\nЕсли Вы хотите объединить все строки, нажмите - 1. Если нет, нажмите - 0: ";
cin >> varConcat;
if(!varConcat) cout << "Строки не будут объединены!" << endl;//если varConcat = 0(ложь)
else //если varConcat = 1
{
strcat(strConcat, str1);
strcat(strConcat, str2);
strcat(strConcat, str3);
cout << "Объединенные строки: " << strConcat << endl << endl;//если пользователь ранее объединил строки, выводим их одной строкой
}
}
void del()//метод очистки памяти по завершении работы программы
{
delete strConcat;
delete strSearch;
delete str3;
delete str2;
delete str1;
}
};
int main()
{
setlocale(LC_ALL, "rus");
Strings strings;//создаем объект
strings.setString();//вызываем метод задания строк в котором также вызывается метод сравнения строк
strings.getString();// вывод строк на экран
strings.concat();// метод конкатенации (пользователь выбирает объединять строки или нет)
strings.del();//чистим память
return 0;
}