Создайте в классе String метод void erase(int, int), который удаляет из этой строки подстроку символов в заданном диапазоне.
В этой задаче введите строку с помощью класса String, введите два числа и выведите строку без удаленных символов обратно на экран.
Формат входных данных
В первой строке вводится одна строка длины не более 105 символов. Во второй строке вводятся два целых неотрицательных числа, не превосходящие длину введенной строки. Гарантируется, что первое число не превосходит второе. Символы имеют ASCII-коды в диапазоне от 32 до 126.
Формат выходных данных
В единственной строке необходимо вывести измененную строку.
входные данные
Hello, World!
5 12
выходные данные
Hello
входные данные
You are welcome
0 7
выходные данные
welcome
Используя этот main:
int main() {
String s;
int i, j;
cin >> s >> i >> j;
s.erase(i, j);
cout << s;
return 0;
}
C/C++
Прошу, помогите пожалуйста с C++
А вот здесь без getline никак! Объект std::cin считывает поток до первого пробельного символа. Для «You are welcome» нужно три объекта String, getline же решает эту проблему!
#include <iostream>
#include <cstring>
using namespace std;
class String {
public:
String() : n(0), str(nullptr) {}
String(const char* cs) : n(strlen(cs)), str(new char[n]) { copy(cs); }
~String() {
if (str != nullptr) {
delete[] str;
str = nullptr;
}
}
String& operator=(const String& s) {
if (&s != this) {
delete[] str;
n = s.n;
str = new char[n];
copy(s.str);
}
return *this;
}
String& operator=(const char* cs) {
if (cs == nullptr) {
n = 0;
str = nullptr;
return *this;
}
if (str != nullptr) delete[] str;
n = strlen(cs);
str = new char[n];
copy(cs);
return *this;
}
void push_back(char ch) {
auto m = n;
char* tmp = new char[m];
for (auto i = 0U; i < m; ++i) tmp[i] = str[i];
delete[] str;
++n;
str = new char[n];
for (auto i = 0U; i < m; ++i) str[i] = tmp[i];
str[m] = ch;
delete[] tmp;
}
void erase(size_t idx) {
if (idx >= n) return;
char* tmp = new char[n - 1];
auto j = 0U;
for (auto i = 0U; i < n; ++i) {
if (i != idx) {
tmp[j] = str[i];
++j;
}
}
delete[] str;
--n;
str = new char[n];
copy(tmp);
delete[] tmp;
}
void erase(size_t first, size_t last) {
if (first >= n) return;
if (first > last) return;
if (last > 1 && last >= n) last = n - 1;
auto m = n + first - last - 1;
char* tmp = new char[m];
auto j = 0U;
for (auto i = 0U; i < n; ++i) {
if (i < first || i > last) {
tmp[j] = str[i];
++j;
}
}
delete[] str;
n = m;
str = new char[n];
copy(tmp);
delete[] tmp;
}
private:
size_t n;
char* str;
void copy(const char* cs) {
for (auto i = 0U; i < n; ++i) str[i] = cs[i];
}
friend ostream& operator<<(ostream& out, const String& s) {
if (!s.n) return out << "";
for (auto i = 0U; i < s.n; ++i) out.put(s.str[i]);
return out;
}
friend istream& operator>>(istream& inp, String& s) {
char tmp[100000];
inp.getline(tmp, 100000);
s = tmp;
return inp;
}
};
istream& getline(istream& inp, String& s) {
char ch = inp.get();
while (ch != '\n') {
s.push_back(ch);
ch = inp.get();
}
return inp;
}
int main() {
String s;
getline(cin, s);
int i, j;
cin >> i >> j;
s.erase(i, j);
cout << s;
system("pause > nul");
}
#include <iostream>
#include <cstring>
using namespace std;
class String {
public:
String() : n(0), str(nullptr) {}
String(const char* cs) : n(strlen(cs)), str(new char[n]) { copy(cs); }
~String() {
if (str != nullptr) {
delete[] str;
str = nullptr;
}
}
String& operator=(const String& s) {
if (&s != this) {
delete[] str;
n = s.n;
str = new char[n];
copy(s.str);
}
return *this;
}
String& operator=(const char* cs) {
if (cs == nullptr) {
n = 0;
str = nullptr;
return *this;
}
if (str != nullptr) delete[] str;
n = strlen(cs);
str = new char[n];
copy(cs);
return *this;
}
void push_back(char ch) {
auto m = n;
char* tmp = new char[m];
for (auto i = 0U; i < m; ++i) tmp[i] = str[i];
delete[] str;
++n;
str = new char[n];
for (auto i = 0U; i < m; ++i) str[i] = tmp[i];
str[m] = ch;
delete[] tmp;
}
void erase(size_t idx) {
if (idx >= n) return;
char* tmp = new char[n - 1];
auto j = 0U;
for (auto i = 0U; i < n; ++i) {
if (i != idx) {
tmp[j] = str[i];
++j;
}
}
delete[] str;
--n;
str = new char[n];
copy(tmp);
delete[] tmp;
}
void erase(size_t first, size_t last) {
if (first >= n) return;
if (first > last) return;
if (last > 1 && last >= n) last = n - 1;
auto m = n + first - last - 1;
char* tmp = new char[m];
auto j = 0U;
for (auto i = 0U; i < n; ++i) {
if (i < first || i > last) {
tmp[j] = str[i];
++j;
}
}
delete[] str;
n = m;
str = new char[n];
copy(tmp);
delete[] tmp;
}
private:
size_t n;
char* str;
void copy(const char* cs) {
for (auto i = 0U; i < n; ++i) str[i] = cs[i];
}
friend ostream& operator<<(ostream& out, const String& s) {
if (!s.n) return out << "";
for (auto i = 0U; i < s.n; ++i) out.put(s.str[i]);
return out;
}
friend istream& operator>>(istream& inp, String& s) {
char tmp[100000];
inp.getline(tmp, 100000);
s = tmp;
return inp;
}
};
istream& getline(istream& inp, String& s) {
char ch = inp.get();
while (ch != '\n') {
s.push_back(ch);
ch = inp.get();
}
return inp;
}
int main() {
String s;
getline(cin, s);
int i, j;
cin >> i >> j;
s.erase(i, j);
cout << s;
system("pause > nul");
}
уже есть класс или тебе свой состряпать?
string s;
int i, j;
cout<<"Введите строку... "; getline(cin, s); fflush(stdin);
cout<<"Введите начало вырезания= "; cin>> i; fflush(stdin);
cout<<"Введите количество вырезания= "; cin >> j; fflush(stdin);
s.erase(i, j);
cout << s;
string s;
int i, j;
cout<<"Введите строку... "; getline(cin, s); fflush(stdin);
cout<<"Введите начало вырезания= "; cin>> i; fflush(stdin);
cout<<"Введите количество вырезания= "; cin >> j; fflush(stdin);
s.erase(i, j);
cout << s;
Похожие вопросы
- Помогите пожалуйста с C++
- ПРОШУ, ПОМОГИТЕ НАПИСАТЬ КОД C++
- Помогите пожалуйста с c++
- Помогите пожалуйста с C++
- Помогите пожалуйста с C++.
- Здравствуйте помогите пожалуйста программирование c++
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Помогите решить задачу пожалуйста, в C++
- Помогите пожалуйста написать код.(C++)
- Помогите пожалуйста - создать 4 массива на c++
{
public:
string s;
STRuser()
{
}
void STRerase(int ii, int jj)
{
s.erase(ii, jj);
}
};
////////////////////////////////////////////////
int main(int argc, char **argv)
{
STRuser s;
int i, j;
cout<<"Введите строку... "; getline(cin, s.s); fflush(stdin);
cout<<"Введите начало вырезания= "; cin>> i; fflush(stdin);
cout<<"Введите количество вырезания= "; cin >> j; fflush(stdin);
s.STRerase(i,j);
cout << s.s;
cout<<endl; system("pause");
return 0;
}