a. Поля:
• * указатель на char - хранит адрес динамически выделенной памяти;
• int n.
b. Конструктор, позволяющий создать строку из n символов.
c. Методы, позволяющие:
• подсчитать количество знаков препинания в строке;
• заменить в строке все строчные символы на прописные;
• прочитать символ из заданной позиции.
d. Свойства:
• возвращающее общее количество элементов в строке (доступное только для чтения);
• позволяющее установить значение поля, в соответствии с введенным значением строки с клавиатуры, а также получить значение данного поля (доступно для чтения и записи).
Код: Выделить всё
class String
{
public:
String(char* string = "")
{
n = strlen(string) + 1;
str = new char[n];
memcpy(str, string, n);
}
String(char* string, size_t size) // конструктор, позволяющий создать строку из size символов
{
n = size + 1;
str = new char[n];
memcpy(str, string, n * sizeof(char));
str[size] = 0;
}
~String()
{
if (str)
delete str;
}
void print()
{
std::cout << str << std::endl;
}
int const getnum() // кол-во символов в строке
{
return n - 1;
}
char const getchar(int n) // символ из позиции n
{
return str[n - 1];
}
void upper() // в верхний регистр
{
for (int i = 0; i < n; i++)
str[i] = toupper(str[i]);
}
int const punctuation() // кол-во знаков препинания
{
int count = 0;
for (int i = 0; i < n + 1; i++)
if (ispunct(str[i]))
count++;
return count;
}
private:
char* str;
int n;
};
int _tmain(int argc, _TCHAR* argv[])
{
String str("linkin park");
str.upper();
str.print();
std::cout << str.getnum() << std::endl;
std::cout << str.punctuation() << std::endl;
std::cout << str.getchar(1) << std::endl;
system("PAUSE");
return 0;
}