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

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

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

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

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

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

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

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

мой программный код :
Код:
#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::Dlin()	//Метод получения длины
{
  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; 18.12.2014 в 20:27.
Евгения Е вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужно написать программу в с++. определить длину строки и определить сколько раз встречается буква П в строке. chit Помощь студентам 4 11.07.2015 14:03
ребят, какие строки нужно добавить, чтобы считывал число Pi maksimka95 Помощь студентам 4 22.04.2013 22:00
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Ввод - сделать так, чтобы в Edit можно было вводить только цифры, или на оборот, только буквы BastAngel Общие вопросы Delphi 7 27.04.2012 01:15
Как сделать так чтобы вводить информацию в Edit Box в двоичной и шестнадцатеричной системах stasy1905 Общие вопросы C/C++ 0 18.12.2009 17:58