Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #include "MyString2.h"
  2.  
  3. MyString2::MyString2()
  4. : m_anker(nullptr) {}
  5.  
  6. MyString2::MyString2(const std::string& str)
  7. : m_anker(nullptr) {
  8. if (str.empty()) {
  9. m_anker = new CharListenKnoten(0);
  10. return;
  11. }
  12.  
  13. CharListenKnoten* ptr = new CharListenKnoten(str.at(0));
  14. m_anker = ptr;
  15. for (std::size_t i = 1; i < str.size(); ++i) {
  16. ptr->set_next(new CharListenKnoten(str.at(i)));
  17. ptr = ptr->get_next();
  18. }
  19. }
  20.  
  21. MyString2::MyString2(const MyString2& str)
  22. : m_anker(str.deep_copy()) {
  23. }
  24.  
  25. MyString2& MyString2::operator=(const MyString2& str) {
  26. delete_all();
  27. m_anker = str.deep_copy();
  28. return *this;
  29. }
  30.  
  31.  
  32. void MyString2::append(char c) {
  33. if (!m_anker)
  34. m_anker = new CharListenKnoten(c);
  35. else {
  36. CharListenKnoten* ptr = m_anker;
  37. while (ptr->get_next()) {
  38. ptr = ptr->get_next();
  39. }
  40.  
  41. ptr->set_next(new CharListenKnoten(c));
  42. }
  43. }
  44.  
  45. void delete_recursively(CharListenKnoten* k) {
  46. if (!k)
  47. return;
  48. delete_recursively(k->get_next());
  49. delete k;
  50. }
  51.  
  52. void MyString2::delete_all() {
  53. delete_recursively(m_anker);
  54. m_anker = nullptr;
  55. }
  56.  
  57. MyString2::~MyString2() {
  58. delete_all();
  59. }
  60.  
  61. CharListenKnoten* MyString2::deep_copy() const {
  62. if (!m_anker)
  63. return nullptr;
  64. CharListenKnoten* new_ptr = new CharListenKnoten(m_anker->get_data());
  65. CharListenKnoten* new_anker = new_ptr;
  66. CharListenKnoten* ptr = m_anker;
  67. while (ptr->get_next()) {
  68. ptr = ptr->get_next();
  69. new_ptr->set_next(new CharListenKnoten(ptr->get_data()));
  70. new_ptr = new_ptr->get_next();
  71. }
  72. return new_anker;
  73. }
  74.  
  75. unsigned int MyString2::length() const {
  76. if (!m_anker)
  77. return 0;
  78. unsigned int count = 0;
  79. for (CharListenKnoten* ptr = m_anker; ptr; ptr = ptr->get_next()) {
  80. count++;
  81. }
  82. return count;
  83. }
  84.  
  85. char MyString2::at(unsigned int pos) const {
  86. unsigned int count = 0;
  87. CharListenKnoten* ptr = m_anker;
  88. while (ptr) {
  89. if (count == pos)
  90. return ptr->get_data();
  91. ptr = ptr->get_next();
  92. ++count;
  93. }
  94. return '\0';
  95. }
  96.  
  97. MyString2 MyString2::operator+(char c) const {
  98. MyString2 s(*this);
  99. s.append(c);
  100. return s;
  101. }
  102.  
  103. std::string MyString2::to_string() const {
  104. std::string s;
  105. if (!m_anker)
  106. return s;
  107. CharListenKnoten* ptr = m_anker;
  108. while (ptr) {
  109. s += ptr->get_data();
  110. ptr = ptr->get_next();
  111. }
  112. return s;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement