Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <fstream>
- #include <list>
- using namespace std;
- bool is_letter(char ch)
- {
- if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
- return true;
- return false;
- }
- int my_strlen(char* s)
- {
- int tmp = 0;
- while (s[tmp])
- tmp++;
- return tmp;
- }
- void my_strcpy(char* s1, char* s2)
- {
- for (int i = 0; i < my_strlen(s2) + 1; i++)
- s1[i] = s2[i];
- }
- class my_string {
- public:
- my_string() { string = new char[256](); size = 0; }
- my_string(char* s) : my_string() { size = my_strlen(s); my_strcpy(string, s); }
- my_string(const my_string& rhs);
- ~my_string() { delete[] string; }
- int getSize() const { return size; }
- char* getString() const { return string; }
- bool operator==(const my_string& rhs);
- bool start_eq_end() { return (this->string[0] == this->string[this->size - 1]) ? true : false; }
- void push_back(char ch) { this->string[this->size] = ch; size++; };
- void clear() { delete[] string; string = new char[256](); size = 0; }
- friend ostream& operator<<( ostream& stream, const my_string& s);
- private:
- char* string;
- int size;
- };
- my_string::my_string(const my_string& rhs)
- {
- this->size = rhs.size;
- this->string = new char[256]();
- my_strcpy(this->string, rhs.string);
- }
- ostream& operator<<(ostream& stream, const my_string& s)
- {
- stream << s.string;
- return stream;
- }
- bool my_string::operator==(const my_string& rhs)
- {
- if (this->size != rhs.size)
- return false;
- for (int i = 0; i < this->size; i++)
- if (this->string[i] != rhs.string[i])
- return false;
- return true;
- }
- //comparing function object for list::sort()
- bool compare(my_string& s1, my_string& s2)
- {
- if (s1.getSize() < s2.getSize())
- return s1.getSize() < s2.getSize();
- if (s1.getSize() > s2.getSize())
- return false;
- if (s1.getSize() == s2.getSize())
- for (int i = 0; i < s1.getSize(); i++)
- if (s1.getString()[i] < s2.getString()[i])
- return s1.getString()[i] < s2.getString()[i];
- else if (s1.getString()[i] > s2.getString()[i])
- return false;
- return false;
- }
- int main()
- {
- ifstream fi("input.txt");
- ofstream fo("output.txt");
- my_string word;
- char ch;
- list<my_string> words;
- fi.get(ch);
- while (fi.peek() != EOF)
- {
- if (is_letter(ch))
- {
- while (is_letter(ch) && fi.peek() != EOF)
- {
- word.push_back(ch);
- fi.get(ch);
- }
- if (is_letter(ch) && fi.peek() != EOF)
- word.push_back(ch);
- //now we have word
- if (word.start_eq_end())
- words.push_back(word);
- }
- else
- fi.get(ch);
- word.clear();
- }
- words.sort(compare);
- words.unique();
- for (list<my_string>::iterator it = words.begin(); it != words.end(); it++)
- fo << *it << ' ';
- fi.close();
- fo.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement