Класс, реализующий операции со строками

Уровень сложности:

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

  • конструктор класса, имеет два параметра: количество строк и максимальная длина строк;
  • операцию задания строки, с заданным номером;
  • метод, который выполняет вывод заданной строки или всех строк на экран;
  • метод конкатенации (объединения) двух строк;
  • метод, который определяет наличие в наборе строк заданной строки. Этот метод должен возвращать номер этой строки в наборе( или -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;
}


Смотрим результат работы программы:

CppStudio.com
Введите три строки (латиницей).
Введите строку №1 (не более 30-ти символов): C++
Введите строку №2 (не более 30-ти символов): C#
Введите строку №3 (не более 30-ти символов): java
Введите строку, номер которой хотите найти (не более 30-ти символов): C#

Номер введенной Вами строки в наборе строк = 2

Если вы хотите отобразить все строки - введите 0.
Если вы хотите вывести на экран конкретную строку, введите ее номер (1, 2 или 3): 0

Строка 1:   C++

Строка 2:   C#

Строка 3:   java

Если Вы хотите объединить все строки, нажмите - 1. Если нет, нажмите - 0: 1
Объединенные строки:   C++C#java

Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 13.09.2012
Поделиться:

Комментарии

  1. Alex Antonyuk

    #ifndef TEXT_H
    #define TEXT_H
    
    #include <vector>
    #include <iostream>
    using namespace std;
    
    class Text
    {
    private:
        vector <string> text;
        int rows;
        unsigned int maxLength;
    public:
        Text(int, int);
        void setLine(const int, string);
        vector <string>& get();
        string get(const int);
        void concatenation(const int, const int);
        void concatenation(const int, string);
        int presence(string);
    };
    
    #endif // TEXT_H
    #include "Text.h"
    #include <iostream>
    #include <vector>
    using namespace std;
    
    Text::Text(int rows1, int maxLength1)
    {
        rows = rows1;
        maxLength = maxLength1;
        text.resize(rows);
        for (int i = 0; i < rows; ++i)
        {
            text[i].clear();
        }
    }
    
    void Text::setLine(const int id, string line)
    {
        if (line.size() > maxLength)
        {
            cout << "Line is too long" << endl;
            return;
        }
        text[id] = line;
    }
    
    vector <string> &Text::get()
    {
        return text;
    }
    
    string Text::get(const int id)
    {
        return text[id];
    }
    
    void Text::concatenation(const int id1, const int id2)
    {
        if (text[id1].size() + text[id2].size() > maxLength)
        {
            cout << "Line is too long" << endl;
            return;
        }
        text[id1] += text[id2];
    }
    
    void Text::concatenation(const int id, string line)
    {
        if (text[id].size() + line.size() > maxLength)
        {
            cout << "Line is too long" << endl;
            return;
        }
        text[id] += line;
    }
    
    int Text::presence(string line)
    {
        for (int a = 0; a < rows; ++a)
        {
            if (text[a].size() >= line.size())
            {
                for (unsigned int i = 0; i < text[a].size(); ++i)
                {
                    if (text[a].size() - i < line.size())
                    {
                        break;
                    }
    
                    bool presence = true;
                    for (unsigned int j = i + 1, k = 1; j < text[a].size(); ++j, ++k)
                    {
                        if (text[a][j] != line[k])
                        {
                            presence = false;
                            break;
                        }
                    }
    
                    if (presence)
                    {
                        return a;
                    }
                }
            }
        }
        return -1;
    }
  2. Arthur

    #include<iostream>
    #include<stdio.h.>
    #include<cstring>
    #include <Windows.h>
    #include<cstdlib>
     using namespace std;
    
    const int SZ = 80;  //длина строки
     class String
     {
     private:
        char str[SZ];
     public:
         String()
         {
             strcpy(str,""); //конструктор без параметров
         }
         String(char s[]) //конструктор с одним параметром
         {
            strcpy(str, s);
         }
         void getstr(int numb) //получение строки от пользователя
         {
             cout<<"Введите строку №"<<numb<<" (не более 30-ти символов): ";
             gets(str);
         }
    
         void showstr() const //показ строки
         {
             cout<<str;
         }
    
         void findnumb()  //получение строки номер которой ищем
         {
             cin.sync();
             cout<<"\nВведите строку, номер которой хотите найти : ";
             gets(str);
         }
    
         bool operator==(String ss) const //перегрузка операции сравнения
         {
             return (strcmp(str, ss.str) == 0)?true:false;
         }
    
         String operator+(String sp) const //перегрузка операции сложения
         {
             String temp;    //временная строка
             if(strlen(str) + strlen(sp.str)<SZ)
             {
                strcpy(temp.str, str); //копируем первую строку во временную
                strcat(temp.str, sp.str); //добавляем вторую строку
                return temp;
             }
             else
             {
                cout<<"\nПереполнение!";
                exit(1);
             }
         }
     };
     /////////////////////////////////////
     int main()
     {
         setlocale(LC_CTYPE, "rus");
         SetConsoleCP(1251);
         SetConsoleOutputCP(1251);
         String s1[3],sAll, fn;
    
         for(int i = 0; i<3; i++) //получение строк от пользователя
         s1[i].getstr(i+1);
    
         int menu;  bool ex = 1;
      while(ex)
      {
              cout<<"\nЕсли вы хотите вывести строку на экран, введите ее номер (1, 2 или 3)."
             <<"\nЕсли хотите найти номер строки       - введите 4."
             <<"\nЕсли вы хотите отобразить все строки - введите 5."
             <<"\nЕсли вы хотите объединить все строки - введите 6."
             <<"\nДля выхода - введите 0."
             <<"\n>>: ";
             cin>>menu;
         switch(menu)
            {
        case 0:
        {
           ex = 0; break;
        }
         case 1:
             {
               cout<<"Строка "<<menu<<": ";  s1[menu - 1].showstr();
               break;
             }
         case 2:
             {
               cout<<"Строка "<<menu<<": "; s1[menu - 1].showstr();
               break;
             }
         case 3:
             {
               cout<<"Строка "<<menu<<": "; s1[menu - 1].showstr();
               break;
             }
         case 4:
            {
               bool ch=0;
               fn.findnumb();//получение строки номер которой необходимо найти
               for(int i = 0; i<3; i++)
               if(s1[i] == fn)
                 {cout<<"Номер введеной вами строки: "<<i+1;  ch=1;}
               if(!ch)
                 cout<<"Нет такой строки!"; break;
            }
         case 5:
             {
               for(int i = 0; i<3; i++)
               {
                   cout<<"\nСтрока "<<i+1<<": "; s1[i].showstr();
               }
             break;
             }
         case 6:
            {
              sAll = s1[0] + s1[1] + s1[2];
              sAll.showstr(); break;
            }
         default: cout<<"Неверный ввод!"<<endl;
         }
     }
    
    return 0;
     }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.