С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Ариено
0 / 0 / 0
Регистрация: 23.03.2014
Сообщений: 16
#1

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

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

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

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

Создать класс Book. Переменная типа Book должна содержать следующие поля: - C++
Помогите решить=(. Создать класс Book. Переменная типа Book должна содержать следующие поля: название, количество авторов; авторы; год...

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

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

Написать меню, позволяющее осуществить проверку всех методов класса - Java
Помогите пожалуйста написать меню, позволяющее осуществить проверку всех методов класса. Для программки import java.util.*; ...

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

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

8
mymedia
193 / 193 / 48
Регистрация: 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
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 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;
        // …
    }
}

Не по теме:

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


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

Не по теме:

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


Но вот если использовать библиотеку, то такой класс и вовсе не нужен, по-моему
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 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 / 48
Регистрация: 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#
Уважаемые форумчане, только начал недавно изучать C# и вот появилась проблема. Прошу вас помочь мне разобраться хотя бы с азами, чтобы...

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

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

Дана строка. разбить её на две строки, одна должна содержать гласные, другая - согласные - Pascal ABC
Дана строка. разбить её на две строки, одна должна содержать гласные, другая - согласные. Реализовать процедурой


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

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

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