Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <fstream>
  4. #include <list>
  5.  
  6. using namespace std;
  7.  
  8. bool is_letter(char ch)
  9. {
  10.     if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
  11.         return true;
  12.     return false;
  13. }
  14.  
  15. int my_strlen(char* s)
  16. {
  17.     int tmp = 0;
  18.     while (s[tmp])
  19.         tmp++;
  20.     return tmp;
  21. }
  22.  
  23. void my_strcpy(char* s1, char* s2)
  24. {
  25.     for (int i = 0; i < my_strlen(s2) + 1; i++)
  26.         s1[i] = s2[i];
  27. }
  28.  
  29. class my_string {
  30. public:
  31.     my_string() { string = new char[256](); size = 0; }
  32.     my_string(char* s) : my_string() { size = my_strlen(s); my_strcpy(string, s); }
  33.     my_string(const my_string& rhs);
  34.     ~my_string() { delete[] string; }
  35.     int getSize() const { return size; }
  36.     char* getString() const { return string; }
  37.     bool operator==(const my_string& rhs);
  38.     bool start_eq_end() { return (this->string[0] == this->string[this->size - 1]) ? true : false; }
  39.     void push_back(char ch) { this->string[this->size] = ch; size++; };
  40.     void clear() { delete[] string; string = new char[256](); size = 0; }
  41.     friend ostream& operator<<( ostream& stream, const my_string& s);
  42. private:
  43.     char* string;
  44.     int size;
  45. };
  46.  
  47. my_string::my_string(const my_string& rhs)
  48. {
  49.     this->size = rhs.size;
  50.     this->string = new char[256]();
  51.     my_strcpy(this->string, rhs.string);
  52. }
  53.  
  54. ostream& operator<<(ostream& stream, const my_string& s)
  55. {
  56.     stream << s.string;
  57.     return stream;
  58. }
  59.  
  60. bool my_string::operator==(const my_string& rhs)
  61. {
  62.     if (this->size != rhs.size)
  63.         return false;
  64.     for (int i = 0; i < this->size; i++)
  65.         if (this->string[i] != rhs.string[i])
  66.             return false;
  67.     return true;
  68. }
  69.  
  70. //comparing function object for list::sort()
  71. bool compare(my_string& s1, my_string& s2)
  72. {
  73.     if (s1.getSize() < s2.getSize())
  74.         return s1.getSize() < s2.getSize();
  75.     if (s1.getSize() > s2.getSize())
  76.         return false;
  77.     if (s1.getSize() == s2.getSize())
  78.         for (int i = 0; i < s1.getSize(); i++)
  79.             if (s1.getString()[i] < s2.getString()[i])
  80.                 return s1.getString()[i] < s2.getString()[i];
  81.             else if (s1.getString()[i] > s2.getString()[i])
  82.                 return false;
  83.     return false;
  84. }
  85.  
  86. int main()
  87. {
  88.     ifstream fi("input.txt");
  89.     ofstream fo("output.txt");
  90.  
  91.     my_string word;
  92.     char ch;
  93.     list<my_string> words;
  94.     fi.get(ch);
  95.    
  96.  
  97.     while (fi.peek() != EOF)
  98.     {
  99.         if (is_letter(ch))
  100.         {
  101.             while (is_letter(ch) && fi.peek() != EOF)
  102.             {
  103.                 word.push_back(ch);
  104.                 fi.get(ch);
  105.             }
  106.             if (is_letter(ch) && fi.peek() != EOF)
  107.                 word.push_back(ch);
  108.             //now we have word
  109.             if (word.start_eq_end())
  110.                 words.push_back(word);
  111.         }
  112.         else
  113.             fi.get(ch);
  114.         word.clear();
  115.     }
  116.  
  117.     words.sort(compare);
  118.     words.unique();
  119.     for (list<my_string>::iterator it = words.begin(); it != words.end(); it++)
  120.         fo << *it << ' ';
  121.  
  122.     fi.close();
  123.     fo.close();
  124.     return 0;
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement