Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2015, 17:44   #1
Евгения Е
Пользователь
 
Регистрация: 21.05.2014
Сообщений: 11
По умолчанию Дать возможность вводить, какие строки сравнивать, у какой строки определить длину и так далее

Задание:
Объявите класс TString, создающий тип – строку.
Элементы – данные класса:
- указатель на строку;
- длина строки.
Предусмотрите конструкторы класса:
- по умолчанию;
- получающий параметр – указатель на строку;
- копирования;
Напишите функции – методы класса для сравнения строк, определения длины строки, конкатенации строк.
Напишите программу, в которой создайте объекты типа TString и выполните над ними действия, предусмотренные методами класса.
В производном классе введите функции-методы для выполнения таких операций над строками, как поиск подстроки, разбиение строки на слова.

В моем программном коде по умолчанию уже сравниваются строки 1 и 2, поиск подстроки ищется в 1 строке и т. д.,
мне нужно сделать, чтобы в программе можно вводить какие строки сравнивать, у какой строки определить длину и так далее, по всем заданиям. Помогите , пожалуйста Или сделать другой вариант: чтобы сравнивались все введенные строки сразу .

мой программный код :
Код:
Код:
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>

using namespace std;

class TString
{
public:
int n;
char *S;
TString():n(0),S(0) {}; //Конструктор по умолчанию
TString(char *); //Конструктор, получающий указатель на строку
TString(const TString &); //Конструктор, получающий ссылку на строку
friend int operator == (TString&, char*); //Перегрузка операции сравнения
int Dlin();	//Метод получения длины строки
TString operator +(TString);
};

class TStrMod: public TString
{
public:
int Poisk(char *); //Поиск подстроки
int Razb(char *X[100]); //Разбитие строки на слова
};

TString::TString(char *X) //Конструктор, получающий указатель на строку
{
int i;
for (i=0;X[i]!='\0';i++);
n=i;
S=new char[n];
strcpy(S,X);
}

TString::TString(const TString &obj) //Конструктор, получающий ссылку на строку
{
n=obj.n;
S=new char [n+1];
S=obj.S;
}

int operator == (TString& a, TString& b)
{
return (!strcmp(a.S,b.S));
}

TString TString::operator +(TString c) //Перегрузка суммирования двух элементов
{
int i;
char *X;
TString R;
X=new char[n+c.n+1];
for (i=0;i<n;i++)
X[i]=S[i];
for (i=n;i<=n+c.n;i++)
X[i]=c.S[i-n];
R.n=n+c.n;
R.S="";
R.S=new char[R.n+1];
R.S=X;
return R;
}

int TString:lin()	//Метод получения длины
{
return n;
}

int TStrMod::Poisk(char *X)	//поиск подстроки
{
int m,i,k,res;
m=strlen(X); k=0; res=0;
for (i=0;i<n;i++)
{
if (S[i]==X[k]) k++; else k=0;
if (k==m) {res=i-k+1; break;}
}
return res;
}

int TStrMod::Razb(char *X[100]) //разбивка по строкам
{
int i,k,t,l;
k=0;
for (i=0;i<n;i++)
if (S[i]==' ') k=k+1;
t=0; l=0; X[0]=new char[100];
for (i=0;i<n;i++)
if (S[i]==' ') {X[t][l]='\0'; t=t+1; l=0;X[t]=new char[100];}
else {X[t][l]=S[i]; l=l+1;}
X[t][l]='\0';
return k+1;
}

void main()
{
char X[255];
int i,n; 
char *SL[100];

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int kolvo,t;

cout<<"Введите количество строк : ";
cin >> kolvo; 

TStrMod *stroki = new TStrMod[kolvo]; // создаём массив из указанного количества строк
gets(X);
for (int i = 0; i < kolvo; ++i) // цикл для ввода строк
{
cout<<"Строка №" << i + 1 << " : ";
gets(X);
stroki[i].S=new char[strlen(X)+1];
strcpy(stroki[i].S,X);
stroki[i].n=strlen(stroki[i].S);
}
cout<<"\nРавны ли строки A и B?\n";
if (stroki[0]==stroki[1]) cout<<"Да!\n\n";
else cout<<"Нет!\n\n";
cout<<"Длина строки B: "<<stroki[1].Dlin()<<"\n\n";
cout<<"Конкатенация строк C и B: ";
TString D(stroki[1]+stroki[2]);
cout<<D.S<<endl;
stroki[2].S=new char[strlen(X)+1];
strcpy(stroki[2].S,X);
stroki[2].n=strlen(stroki[2].S);
cout<<"\nСтрока A по словам: \n";
n=stroki[0].Razb(SL);
for (i=0;i<n;i++)
cout<<SL[i]<<endl;
cout<<"\nСтрока C входит в строку B с позиции (если 0 - значит не входит!): "<<stroki[1].Poisk(stroki[2].S)<<endl;
system("pause");
return;
}

Последний раз редактировалось Stilet; 07.01.2015 в 18:33.
Евгения Е вне форума Ответить с цитированием
Старый 07.01.2015, 18:10   #2
Евгения Е
Пользователь
 
Регистрация: 21.05.2014
Сообщений: 11
По умолчанию

В моем программном коде по умолчанию уже сравниваются строки 1 и 2, поиск подстроки ищется в 1 строке и т. д.,
мне нужно сделать, чтобы в программе можно вводить какие строки сравнивать, у какой строки определить длину и так далее, по всем заданиям. Помогите , пожалуйста Или сделать другой вариант: чтобы сравнивались все введенные строки сразу .

мой программный код :
Код:
Код:
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>

using namespace std;

class TString
{
public:
int n;
char *S;
TString():n(0),S(0) {}; //Конструктор по умолчанию
TString(char *); //Конструктор, получающий указатель на строку
TString(const TString &); //Конструктор, получающий ссылку на строку
friend int operator == (TString&, char*); //Перегрузка операции сравнения
int Dlin();	//Метод получения длины строки
TString operator +(TString);
};

class TStrMod: public TString
{
public:
int Poisk(char *); //Поиск подстроки
int Razb(char *X[100]); //Разбитие строки на слова
};

TString::TString(char *X) //Конструктор, получающий указатель на строку
{
int i;
for (i=0;X[i]!='\0';i++);
n=i;
S=new char[n];
strcpy(S,X);
}

TString::TString(const TString &obj) //Конструктор, получающий ссылку на строку
{
n=obj.n;
S=new char [n+1];
S=obj.S;
}

int operator == (TString& a, TString& b)
{
return (!strcmp(a.S,b.S));
}

TString TString::operator +(TString c) //Перегрузка суммирования двух элементов
{
int i;
char *X;
TString R;
X=new char[n+c.n+1];
for (i=0;i<n;i++)
X[i]=S[i];
for (i=n;i<=n+c.n;i++)
X[i]=c.S[i-n];
R.n=n+c.n;
R.S="";
R.S=new char[R.n+1];
R.S=X;
return R;
}

int TString:lin()	//Метод получения длины
{
return n;
}

int TStrMod::Poisk(char *X)	//поиск подстроки
{
int m,i,k,res;
m=strlen(X); k=0; res=0;
for (i=0;i<n;i++)
{
if (S[i]==X[k]) k++; else k=0;
if (k==m) {res=i-k+1; break;}
}
return res;
}

int TStrMod::Razb(char *X[100]) //разбивка по строкам
{
int i,k,t,l;
k=0;
for (i=0;i<n;i++)
if (S[i]==' ') k=k+1;
t=0; l=0; X[0]=new char[100];
for (i=0;i<n;i++)
if (S[i]==' ') {X[t][l]='\0'; t=t+1; l=0;X[t]=new char[100];}
else {X[t][l]=S[i]; l=l+1;}
X[t][l]='\0';
return k+1;
}

void main()
{
char X[255];
int i,n; 
char *SL[100];

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int kolvo,t;

cout<<"Введите количество строк : ";
cin >> kolvo; 

TStrMod *stroki = new TStrMod[kolvo]; // создаём массив из указанного количества строк
gets(X);
for (int i = 0; i < kolvo; ++i) // цикл для ввода строк
{
cout<<"Строка №" << i + 1 << " : ";
gets(X);
stroki[i].S=new char[strlen(X)+1];
strcpy(stroki[i].S,X);
stroki[i].n=strlen(stroki[i].S);
}
cout<<"\nРавны ли строки A и B?\n";
if (stroki[0]==stroki[1]) cout<<"Да!\n\n";
else cout<<"Нет!\n\n";
cout<<"Длина строки B: "<<stroki[1].Dlin()<<"\n\n";
cout<<"Конкатенация строк C и B: ";
TString D(stroki[1]+stroki[2]);
cout<<D.S<<endl;
stroki[2].S=new char[strlen(X)+1];
strcpy(stroki[2].S,X);
stroki[2].n=strlen(stroki[2].S);
cout<<"\nСтрока A по словам: \n";
n=stroki[0].Razb(SL);
for (i=0;i<n;i++)
cout<<SL[i]<<endl;
cout<<"\nСтрока C входит в строку B с позиции (если 0 - значит не входит!): "<<stroki[1].Poisk(stroki[2].S)<<endl;
system("pause");
return;
}

Последний раз редактировалось Stilet; 07.01.2015 в 18:34.
Евгения Е вне форума Ответить с цитированием
Старый 07.01.2015, 22:56   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Надо что-то типа меню:
Код:
do{
   system("cls");
   cout<< "1 - first menu" << endl;
   cout<< "2 - second menu" << endl;
   cout<< "0 - exit menu" << endl;
   c = getch();
   switch(c){
     case '1':
        .....
      break;
     case '2':
        .....
      break;
   }
} while (c != '0');
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно написать программу в с++. определить длину строки и определить сколько раз встречается буква П в строке. chit Помощь студентам 4 11.07.2015 14:03
нужно сделать, чтобы в программе можно вводить какие строки сравнивать, у какой строки определить длину и так далее, по всем задан Евгения Е Общие вопросы C/C++ 0 18.12.2014 20:13
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
определить длину строки, ерунду пишет Музыкант Visual C++ 7 12.11.2012 19:06
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54