|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.12.2014, 19:35 | #1 |
Пользователь
Регистрация: 21.05.2014
Сообщений: 11
|
сделать,чтобы запрашивалось сколько вводить строк. наследование класса
Задание:
Объявите класс TString, создающий тип – строку. Элементы – данные класса: - указатель на строку; - длина строки. Предусмотрите конструкторы класса: - по умолчанию; - получающий параметр – указатель на строку; - копирования; Напишите функции – методы класса для сравнения строк, определения длины строки, конкатенации строк. Напишите программу, в которой создайте объекты типа TString и выполните над ними действия, предусмотренные методами класса. В производном классе введите функции-методы для выполнения таких операций над строками, как поиск подстроки, разбиение строки на слова. В программе у меня ввод 3 строк, а нужно сделать, чтобы сначала запрашивалось сколько строк вводить, а потом я их уже вводила. как так сделать? помогите,пожалуйста, заранее спасибо Код:
Последний раз редактировалось Stilet; 12.12.2014 в 07:41. |
12.12.2014, 07:33 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Код:
|
12.12.2014, 16:50 | #3 | |
Пользователь
Регистрация: 21.05.2014
Сообщений: 11
|
как с операциями сделать? я дуб дубом, помоги, пожалуйста!
как с операциями сделать? я дуб дубом, помоги, пожалуйста!
Цитата:
|
|
12.12.2014, 18:08 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Например, сравнение первой и второй введенных строк:
Код:
|
12.12.2014, 18:40 | #5 | |
Пользователь
Регистрация: 21.05.2014
Сообщений: 11
|
не работает программа(
Цитата:
#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:perator +(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; cout<<"Введите количество строк:\n"; cin >> kolvo; // ввод пользователем числа строк TStrMod *stroki = new TStrMod[n]; // создаём массив из указанного пользователем числа строк 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<<"Длина строки"<<stroki[0].Dlin()<<"\n\n"; system("pause"); return; } |
|
12.12.2014, 20:12 | #6 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Лоханулся я немного
Код:
|
12.12.2014, 20:33 | #7 |
Пользователь
Регистрация: 21.05.2014
Сообщений: 11
|
последний вопрос, можно?) как делать конкатенацию
н.................................. ..................................
Последний раз редактировалось Евгения Е; 13.12.2014 в 05:02. |
15.12.2014, 13:58 | #8 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
конкатенация - это сцепление (конкатенацией строк "абв" и "где" будет строка "абвгде"). В данном случае тут оператор + для этого и использовался. Просто вместо того, чтобы ручками всё копировать, можно использовать функцию strcat, а то для копирования строк использовали strcpy, а конкатенацию навелосипедили, некрасиво как-то
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать прогу чтобы показывать сколько дней осталось до... | Bigtyoma | Общие вопросы Delphi | 20 | 23.12.2016 06:23 |
Ввод - сделать так, чтобы в Edit можно было вводить только цифры, или на оборот, только буквы | BastAngel | Общие вопросы Delphi | 7 | 27.04.2012 01:15 |
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл | betirsolt | БД в Delphi | 1 | 17.01.2010 18:51 |
Как сделать так чтобы вводить информацию в Edit Box в двоичной и шестнадцатеричной системах | stasy1905 | Общие вопросы C/C++ | 0 | 18.12.2009 17:58 |
Как сделать, чтобы один элемент списка в ComboBox писался в несколько строк? | Andr | Общие вопросы Delphi | 5 | 15.08.2007 22:24 |