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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2013, 19:24   #1
GexogenSG1
Пользователь
 
Регистрация: 16.06.2013
Сообщений: 18
Восклицание Комментарии

Откоментируйте пожалуйста каждую строчку в этом коде. Что она делает, для чего и т.д. Код изучаю не так давно, поэтому сам этого сделать не могу. Ну, конечно, кроме cout и cin)

Задание:
А. Спроектировать класс String, содержащий две закрытые переменные - указатель на символьную строку (char *s) и размер строки (int п), - и функции работы с ними. Состав функций:
1) три конструктора: первый - без параметров, второй - с параметрами, третий - для создания копии объекта;
2) деструктор, освобождающий память, занятую строкой;
3) функции доступа к закрытым членам класса: возвращение размера строки length(), извлечение символа с указанным индексом at(), установка символа строки setchar();
4) функции работы со строками: определение длины строки strlen(), удаления фрагмента строки erase(), вставка фрагмента в строку insert(), добавления фрагмента в конец строки append();
5) оператор-функции для перегрузки: операции присваивания (=) - для копирования строк, операции «+» - для «склеивания» объектов типа String, операций сравнения (==, !=, <, >) объектов типа String, операции преобразования типа String в символьную строку.
6) оператор-функции перегрузки операторов консольного вывода и ввода объ-ектов типа String с одновременной русификацией.
Б. Создать необходимое количество объектов и продемонстрировать работу спроектированных средств при использовании объектов типа String.

Последний раз редактировалось GexogenSG1; 16.06.2013 в 19:27.
GexogenSG1 вне форума Ответить с цитированием
Старый 16.06.2013, 19:25   #2
GexogenSG1
Пользователь
 
Регистрация: 16.06.2013
Сообщений: 18
По умолчанию

4.cpp
#include "class.h"
void main()
{
String obj_A,obj_B,obj_C; char ap, ins, ch; int i,j;
cout<<Rus("Введите строку 1(obj_A): "); cin>>obj_A;
cout<<Rus("Введите строку 2(obj_B): "); cin>>obj_B;
cout<<"obj_A = "; cout<<obj_A<<endl<<"obj_B = "<<obj_B<<endl;
if(obj_A<obj_B) cout<<obj_A<<"<"<<obj_B<<endl;
if(obj_A>obj_B) cout<<obj_A<<">"<<obj_B<<endl;
if(obj_A!=obj_B) cout<<obj_A<<"!="<<obj_B<<endl; else cout<<obj_A<<"!="<<obj_B<<endl;
cout<<obj_A<<" + "<<obj_B<<" = "; obj_C=obj_A+obj_B; cout<<obj_C<<endl;
cout<<Rus("В конец строки '")<<obj_C; cout<<Rus("' добавить(append): "); cin>>&ap; obj_C.append(&ap);
cout<<Rus("Результат: ")<<obj_C<<endl;
cout<<Rus("Введите номер символа, после которого нужно вставить 'insert' (insert): "); cin>>i; obj_C.insert("insert", i); cout<<Rus("Результат: ")<<obj_C<<endl;
cout<<Rus("Поменять символ в '")<<obj_C; cout<<Rus("' под номером (setchar): "); cin>>i;
cout<<Rus("На символ (setchar): "); cin>>ch; obj_C.setchar(ch, i);
cout<<Rus("Результат: ")<<obj_C<<endl;
cout<<Rus("Вырезать символы в '")<<obj_C; cout<<Rus("' с номера (erase): "); cin>>i;
cout<<Rus("До символа (erase): "); cin>>j; obj_C.erase(i, j);
cout<<Rus("Результат: ")<<obj_C<<endl;
cout<<Rus("Введите номер символа, для '")<<obj_C; cout<<Rus("' (at): "); cin>>i;
cout<<Rus("Результат: "); cout<<obj_C.at(i)<<endl;
cout<<Rus("Всего в '")<<obj_C; cout<<Rus("' ")<<obj_C.length(); cout<<Rus(" символов (length):")<<endl;}
GexogenSG1 вне форума Ответить с цитированием
Старый 16.06.2013, 19:26   #3
GexogenSG1
Пользователь
 
Регистрация: 16.06.2013
Сообщений: 18
По умолчанию

class.h
#include <iostream>
#include <windows.h>
using namespace std;

char *Rus(char *str){static char s[256]; CharToOemA(str, s); return s;}

class String
{char* str; int n;
public:

static int strlen(char *str){int i; for(i=0; *str++; i++); return i;}
String():n(1){str = new char[1]; str[0]='\0'; }
String(char* s){n = strlen(s); str = new char[n]; for(int i=0; i<n; i++) str[i]=s[i]; str[n]='\0'; CharToOemA(str,str);}
~String(){delete []str, n;}

bool operator < (String& s2){ int k = (n < s2.n) ? n:s2.n;
for(int i=0; i<k; i++){if(str[i]==s2.str[i])continue; return(str[i]<s2.str[i])?true:false;}return (n<k)?true: false;}

bool operator > (String& s2){
int k = (n < s2.n) ? n:s2.n;
for(int i=0; i<k; i++){if(str[i]==s2.str[i]) continue;
return (str[i]>s2.str[i])? true : false; }return (n>k)?true: false;}
bool operator != (String& s2){ if(n != s2.n) return true;
for(int i=0; i<n; i++){if(str[i]!=s2.str[i]) return true;}return false;}

String& operator = (String& st){if(&st==this) return *this;
if(str) delete[]str; n=st.n;
str=new char[n];for(int i=0; i<n; i++) str[i]=st.str[i];return *this;}

operator char*()
{char *p=new char[n+1]; int i; for(i=0; i<n;i++) p[i]=str[i]; p[i]='\0';return p;}

friend istream& operator >> (istream& in, String& st)
{in>>st.str; st.n=strlen(st.str); return in;}
friend ostream& operator << (ostream& out, String& st)
{out<<st.str<<"("<<st.n<<")"; return out;}

String& operator + (String& st){
int i,j,k=n+st.n;
char *p=new char[k];
String *temp=new String;
for(i=0;i<n;i++) p[i]=str[i];
for(j=0;i<k;i++,j++) p[i]=st.str[j]; p[i]='\0';
temp->str=p; temp->n=k; return *temp;}

int length(){return n;}

char at(int k){k--; return (k>=0 && k<n)? str[k]:'\0';}

void setchar(char ch, int k){k--; if(k>=0 && k<n) str[k]=ch;}

void erase(int start, int end){
int i,j,k=n+start-end-1; char *p = new char[k];
for(i=0; i<start; i++) p[i]=str[i];
for(i--, j=end; i<k; i++, j++)p[i]=str[j]; p[i]='\0';
delete[]str; str=p; n=k;}

void append(char *s){
int len = strlen(s); int i, k=n+len;
char *p = new char[k];
for(i=0; i<n; i++) p[i]=str[i];
for(i; i<k; i++) p[i]=*s++; p[i]='\0';
delete[] str; str=p; n=k;}

void insert(char *s, int w){w--; int i=0,j=0,ii=0,len = strlen(s),k=n+len;
char *p=new char[k];
for(i;i<w;i++,ii++) p[i]=str[i];
for(j;j<len;j++,i++) p[i]=s[j];
for(i;i<k;i++,ii++) p[i]=str[ii];
delete[] str; str=p; n=k;}};
GexogenSG1 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
комментарии zxzxz Помощь студентам 0 19.03.2013 14:28
комментарии СИ Oleg3 Помощь студентам 4 19.09.2012 13:41
комментарии Shinobig Помощь студентам 5 17.01.2012 14:54