Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Ариено
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 16
1

Класс строка. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса

23.03.2014, 19:58. Просмотров 975. Ответов 8
Метки нет (Все метки)

Здравствуйте народ, есть такая задача.
Определить класс "строка". в классе предусмотреть следующие поля:
- адрес первого элеметна строки
- длинна строки
и следующие методы:
- инициализация строки
- вывод строки на экран
- перевод всех символов строки в верхний регистр
- перевод всех символов строки в нижний регистр
- поиск первого вхождения символа в строки
- замена местами первого и последнего символов строки

Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2014, 19:58
Ответы с готовыми решениями:

Создать класс Book. Переменная типа Book должна содержать следующие поля:
Помогите решить=(. Создать класс Book. Переменная типа Book должна содержать...

Матрица/ Осуществить в цикле проверку факта расположения всех 10 точек на прямой, проходящей через начало координат...
Дана матрица А с 2 строками и 10 столбцами.Первый элемент каждого столбца...

От класса String наследовать новый класс, который имеет проверку на превышение размера строки
Доброго времени суток! Решаю задачи из учебника Роберта Лафоре ООП в C++....

Написать меню, позволяющее осуществить проверку всех методов класса
Помогите пожалуйста написать меню, позволяющее осуществить проверку всех...

дано натуральное число а.Указать сколько в нем разрядов.программа должна содержать проверку типов вводимых данных с выдачей отчетов об ошибках.
дано натуральное число а.Указать сколько в нем разрядов.программа должна...

8
mymedia
193 / 193 / 120
Регистрация: 27.05.2011
Сообщений: 544
23.03.2014, 21:29 2
Лучший ответ Сообщение было отмечено Ариено как решение

Решение

Ну, вот как-то так
my_str.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef MY_STR_H
#define MY_STR_H
 
namespace my
{
 
class string
{
    char* first;
    unsigned int lendth;
public:
    string() : first(0), lendth(0) {  }
    string(const char* s) : first(0) { init(s); }
    ~string();
    void init(const char*);
    void print() const;
    void upper();
    void lower();
    void swap();
    char* seek(char ch) const;
};  // class string
 
}   // namespace my
 
#endif
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <string>
#include "my_str.h"
int main()
{
    using namespace std;
    cout << "Строки v1.0\n"
        "Справка: 1 - инициализация, 2 - вывод, 3 - в верхний регистр, 4 - в нижний регистр\n"
        "5 - обмен первого и последнего символа, 6 - поиск символа, 0 - выход\n" << endl;
    my::string main_string;
    char ch;
    
menu:
    cout << ">";
    ch = 0;
    cin.get(ch);
    if(ch == '1') 
    {
        string str;
        cin >> str;
        main_string.init(str.c_str());
    }
    else if(ch == '2')
    {
        main_string.print();
        cout << endl;
    }
    else if(ch == '3') main_string.upper();
    else if(ch == '4') main_string.lower();
    else if(ch == '5') main_string.swap();
    else if(ch == '6')
    {
        cin.get(ch);
        cout << *main_string.seek(ch) << endl;
    }
    else if(ch == '0') return 0;
    goto menu;
    return 1;
}
my_str.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include "my_str.h"
my::string::~string()
{
    if(first) delete[] first;
}
void my::string::init(const char* s)
{
    unsigned int i = 0;
    {
        const char* p = s;
        while(*p++) i++;
        this->~string();
        first = new char[i];
        lendth = i;
    }
    i = 0;
    while(*s) first[i++] = *s++;
}
void my::string::print() const
{
    for(unsigned int i = 0; i < lendth; i++) std::cout << first[i];
}
void my::string::upper()
{
    for(unsigned int i = 0; i < lendth; i++)
    switch(first[i])
    {
        case 'a': first[i] = 'A'; break;    case 'b': first[i] = 'B'; break;
        case 'c': first[i] = 'C'; break;    case 'd': first[i] = 'D'; break;
        case 'e': first[i] = 'E'; break;    case 'f': first[i] = 'F'; break;
        case 'g': first[i] = 'G'; break;    case 'i': first[i] = 'I'; break;
        // …
    }
}
void my::string::lower()
{
    for(unsigned int i = 0; i < lendth; i++)
    switch(first[i])
    {
        case 'A': first[i] = 'a'; break;    case 'B': first[i] = 'b'; break;
        case 'C': first[i] = 'c'; break;    case 'D': first[i] = 'd'; break;
        case 'E': first[i] = 'e'; break;    case 'F': first[i] = 'f'; break;
        case 'G': first[i] = 'g'; break;    case 'I': first[i] = 'i'; break;
        // …
    }
}
void my::string::swap()
{
    if(lendth <= 0) return;
    char t = first[lendth-1];
    first[lendth-1] = first[0];
    first[0] = t;
}
char* my::string::seek(char ch) const
{
    for(unsigned int i = 0; i < lendth; i++)
    if(first[i] == ch) return first+i;
    return 0;
}
1
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
24.03.2014, 11:04 3
Лучший ответ Сообщение было отмечено Ариено как решение

Решение

Цитата Сообщение от mymedia Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
void my::string::upper()
{
    for(unsigned int i = 0; i < lendth; i++)
    switch(first[i])
    {
        case 'a': first[i] = 'A'; break;    case 'b': first[i] = 'B'; break;
        case 'c': first[i] = 'C'; break;    case 'd': first[i] = 'D'; break;
        case 'e': first[i] = 'E'; break;    case 'f': first[i] = 'F'; break;
        case 'g': first[i] = 'G'; break;    case 'i': first[i] = 'I'; break;
        // …
    }
}

Не по теме:

извините, но это п....ц :rofl:


есть же toupper() и tolower()
1
mymedia
193 / 193 / 120
Регистрация: 27.05.2011
Сообщений: 544
24.03.2014, 15:08 4
aLarman, да, я знаю. Просто не хотел лишние заголовки подключать

Не по теме:

Библиотечные ф-ции работают быстрее и лучше


Но вот если использовать библиотеку, то такой класс и вовсе не нужен, по-моему
0
aLarman
644 / 565 / 164
Регистрация: 13.12.2012
Сообщений: 2,112
Завершенные тесты: 1
24.03.2014, 15:25 5
Цитата Сообщение от mymedia Посмотреть сообщение
Просто не хотел лишние заголовки подключать
а надо ли?
0
Ариено
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 16
24.03.2014, 21:18  [ТС] 6
Ну а как будет без ошибок?

Добавлено через 1 минуту
И можно пояснить где что есть?
0
mymedia
193 / 193 / 120
Регистрация: 27.05.2011
Сообщений: 544
24.03.2014, 21:30 7
Я думаю, лучше замени методы upper и lower на
C++
1
2
3
4
5
6
7
8
9
10
void my::string::upper()
{
    for(unsigned int i = 0; i < lendth; i++)
    first[i] = std::toupper(first[i]);
}
void my::string::lower()
{
    for(unsigned int i = 0; i < lendth; i++)
    first[i] = std::tolower(first[i]);
}
А в начало файла my_str.cpp добавь
C++
1
#include <cctype>
Добавлено через 8 минут
1. Файл my_str.h -> описание класса string (его интерфейса)
2. Файл my_str.cpp -> реализация его методов
3. Файл main.cpp -> реализация меню программы (сделана на скорую руку, может что подправить надо)
1
aLarman
25.03.2014, 10:27
  #8

Не по теме:

mymedia,

Цитата Сообщение от mymedia Посмотреть сообщение
лучше замени методы upper и lower на
так то лучше :)

0
Ариено
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 16
25.03.2014, 14:38  [ТС] 9
Спасибо!
0
25.03.2014, 14:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 14:38

Разработать программу работы с бинарным деревом. Программа должна содержать следующие процедуры, вызываемые из меню
Разработать программу работы с бинарным деревом. Программа должна содержать...

Программа должна содержать также класс «город», хранящий в себе массив или список городских объектов
Уважаемые форумчане, только начал недавно изучать C# и вот появилась проблема....

Строка s2 должна содержать буквы только из множества букв 1-го слова 1-й строки
ввести строку s1 с помощью оператора readln. Определить ее реальную длину и 1-е...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru