Создать класс для работы со строками. Перегрузить (переопределить): деление операция “логический сдвиг вправо”
Разработать следующие элементы класса:
а. Поля: char *str; int n.
б. Конструктор, позволяющий создать строку из символов.
в. Методы, позволяющие: подсчитать количество пробелов в строке; заменить в строке все прописные символы на строчные; удалить из строки все знаки препинания.
г. Перегрузить (переопределить): деление операция “логический сдвиг вправо”
Трудности вызвал пункт г, подскажите пожалуйста как его сделать. Так же не откажусь от замечаний по коду
#include<iostream>
#include<cstdio>
#include <clocale>
using namespace std;
class String
{
char* str;
int n = 50;
public:
String() {
str = new char[n];
};
void Initialization() {
cout << "Enter string: ";
gets_s(str, n);
}
void PrintStr() {
cout << str << endl;
}
void CountSpace() {
int count = 0;
for (int i = 0; i < strlen(str); i++) {
if (str[i] == ' ')
count++;
}
cout << count << endl;
}
void Replacement() {
for (int i = 0; i < strlen(str); i++) {
if ((str[i] != ' ') && (!ispunct(str[i])))
str[i] -= 32;
}
}
void Mark() {
char* temp = new char[n];
int j = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (!ispunct(str[i])) {
temp[j] = str[i];
j++;
}
}
temp[j] = '\0';
memset(str, 0, n);
for (int i = 0; temp[i] != '\0'; i++) {
str[i] = temp[i];
}
}
};
int main()
{
setlocale(LC_CTYPE, "rus");
String obj1;
obj1.Initialization();
obj1.PrintStr();
obj1.Replacement();
obj1.PrintStr();
return 0;
}
Ответы (1 шт):
Автор решения: Sergey Tatarincev
→ Ссылка
class String
{
// ....
public:
String() {
str = new char[n]; memset(str,0,n); } // Лучше при создании буфера сразу его обнулять
// ....
void setString(char* newstr,int len){
memset(str,0,n);
memcpy(str,newstr,len);
}
friend operator>>(String& src,int num)
{
char* tmp = new char[src.n];
memset(tmp,0,src.n);
memcpy(tmp,&src.str[num],src.n-num);
memcpy(src.str,tmp,src.n);
}
};
int main(int argc, char **argv) {
String s;
char str[10]="hello";
s.setString(str,5);
s.PrintStr();
s>>2;
s.PrintStr();
}