Помогите найти ошибку в коде.
Задание глобальное:"Создать класс String".
На одном из этапов надо добавить в класс метод int String::length(), который возвращает длину строки и перегрузить для класса операцию [] так, чтобы можно было обращаться и менять элементы строки: char& operator[] (int). С помощью указанных методов поменять местами первый и последний символы в строке.
Пример:
На входе: "Lorem Ipsum has been"
На выходе: "norem Ipsum has beeL"
#include <iostream>
#include <cstring>
using namespace std;
class String{
int len;
char *str;
public:
String (): len(0), str(nullptr){}
String(const String&src);
String(const char *str);
~String();
int length(String &);
char& operator [](int index){
return str[index];
}
friend istream &operator >>(istream &in, String &s);
friend ostream &operator <<(ostream &out, String s);
};
String::String(const String &src){
len = src.len;
this->str = new char[len+1];
strncpy(str, src.str, len);
this->str[len] = '\0';
}
String::String(const char*str){
len = strlen(str);
this->str = new char*[len+1];
strncpy(this->str, str, len);
this->str[len] = '\0';
}
String::~String(){
delete [] str;
}
int String::length(String &s){
len = strlen(s.str);
return len;
}
istream &operator >>(istream &in, String &s){
char *buf = new char[100001];
in.getlin(buf, 100000);
s.len = strlen(buf);
s.str = new char[s.len];
for(int i = 0; i < s.len; ++i)
s.str[i] = buf[i];
delete [] buf;
return in;
}
ostream &operator <<(ostream &out, String s){
for(int i = 0; i < s.len; ++i)
out << s.str[i];
return out;
}
int main(){
String s;
cin >> s;
char tmp = s[s.length];
s[s.length] = s[0];
s[0] = tmp;
cout << s;
return 0;
}
Кое-что несколько подзапущено...
Вот, смотрите. Я бы еще добавил запрет выхода за границу массива в операторе [].
#include <iostream>
#include <cstring>
using namespace std;
class String
{
size_t len;
char *str;
public:
String (): len(0), str(nullptr){}
String(const String&src);
String(const char *str);
~String() { delete[] str; }
size_t length() const { return len; };
char& operator [](size_t index)
{
return str[index];
}
char operator [](size_t index) const
{
return str[index];
}
friend istream &operator >>(istream &in, String &s);
friend ostream &operator <<(ostream &out, const String& s);
};
String::String(const String &src)
{
len = src.len;
this->str = new char[len+1];
strcpy(str, src.str);
}
String::String(const char*s)
{
len = strlen(s);
str = new char[len+1];
strcpy(str, s);
}
istream &operator >>(istream &in, String &s)
{
char *buf = new char[100001];
in.getline(buf, 100000);
delete[] s.str;
s.len = strlen(buf);
s.str = new char[s.len+1];
strcpy(s.str,buf);
delete [] buf;
return in;
}
ostream &operator <<(ostream &out, const String& s)
{
return out << s.str;
}
int main()
{
String s;
cin >> s;
char tmp = s[s.length()-1];
s[s.length()-1] = s[0];
s[0] = tmp;
cout << s;
return 0;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости