|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.06.2013, 19:24 | #1 |
Пользователь
Регистрация: 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. |
16.06.2013, 19:25 | #2 |
Пользователь
Регистрация: 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>>≈ 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;} |
16.06.2013, 19:26 | #3 |
Пользователь
Регистрация: 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;}}; |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
комментарии | zxzxz | Помощь студентам | 0 | 19.03.2013 14:28 |
комментарии СИ | Oleg3 | Помощь студентам | 4 | 19.09.2012 13:41 |
комментарии | Shinobig | Помощь студентам | 5 | 17.01.2012 14:54 |