Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Max_Timokhin
6 / 6 / 1
Регистрация: 14.11.2016
Сообщений: 45
1

Разработать класс String для работы со строками

27.03.2017, 20:54. Просмотров 757. Ответов 9

Разработать программу, демонстрирующую работу с производным от приведенного в примере класса. Класс должен включать три метода работы со строками:
1) Удаляет из текста строки все буквы малого регистра;
2) удаляет все предложения с количеством букв, больше N;
3) выполняет поиск слов в строке, соответствующих заданному, и выводит в столбец позиции найденных последовательностей.

Пример выполнения задания
Разработать класс, что включает три метода работы со строками:
1) Метод смены регистра символа;
2) метод выделения в строке символа или совокупности символов;
3) метод получения суммы ASCII кодов символов строки.

Код программы-примера:
Кликните здесь для просмотра всего текста
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
#include <string>
using namespace std;
 
class CBaseString
{
public:
    char ChangeCharReg(unsigned char c);
    string SelectString(string s, string subs);
    int GetStringWeight(string subs);
};
char CBaseString::ChangeCharReg(unsigned char c)
{
    if (c>=65 && c<=90)
        return c+32;
    else if (c>=97 && c<=122)
        return c-32;
    else if (c>=128 && c<=143)
        return c+32;
    else if (c>=144 && c<=159)
        return c+80;
    else if (c>=160 && c<=175)
        return c-32;
    else if (c>=224 && c<=239)
        return c-80;
    else if (c==240)
        return c+1;
    else if (c==241)
        return c-1;
    else
        return c;
}
string CBaseString::SelectString(string s, string subs)
{
    string str;
    int n;
    while ((n=s.find(subs))>-1)
    {
        str+=s.substr(0,n);
        str+='('+subs+')';
        s=s.substr(n+subs.length(),s.length()-n-subs.length()+1);
    }
    str+=s;
    return str;
}
int CBaseString::GetStringWeight(string subs)
{
    int sum=0;
    for (int i=0; i<subs.length(); i++)
    {
        sum+=subs.at(i);
    }
    return sum;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2017, 20:54
Ответы с готовыми решениями:

Разработать класс String для работы со строками
/*Разработать класс String для работы со строками. Класс должен содержать: -...

Разработать класс String для работы со строками
разработать класс String для работы со строками. Класс должен содержать контср...

Разработать класс String, который в дальнейшем будет использоваться для работы со строками.
Всем доброго времени суток! Помогите пожалуйста т.к я не очень понимаю задание,...

Разработать класс String, который в дальнейшем будет использоваться для работы со строками
Всем доброго времени суток! Вот задание: Разработать класс String,...

Разработать класс String, который в дальнейшем будет использоваться для работы со строками
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace...

9
Nishen
468 / 293 / 156
Регистрация: 26.02.2015
Сообщений: 1,364
Завершенные тесты: 2
27.03.2017, 20:55 2
Max_Timokhin, а вопрос в чём? Или Вы просто решили поделиться своими трудами с другими студентами?
0
Max_Timokhin
6 / 6 / 1
Регистрация: 14.11.2016
Сообщений: 45
27.03.2017, 21:07  [ТС] 3
Nishen, мне нужно написать программу:
Разработать класс, что включает три метода работы со строками:
1) Удаляет из текста строки все буквы малого регистра;
2) удаляет все предложения с количеством букв, больше N;
3) выполняет поиск слов в строке, соответствующих заданному, и выводит в столбец позиции найденных последовательностей.
А снизу я дал пример, который написан у меня в учебнике. И мне нужно, основываясь на этом примере написать свою программу.
0
0xb01e0
3 / 3 / 4
Регистрация: 27.03.2017
Сообщений: 11
Завершенные тесты: 1
28.03.2017, 06:00 4
Лучший ответ Сообщение было отмечено Max_Timokhin как решение

Решение

header
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef STRINGCLASS_H
#define STRINGCLASS_H
 
#include <iostream>
 
using namespace std;
 
class StringClass {
private:
    string text;
 
public:
    StringClass();
    ~StringClass();
 
    const string getText() const;
    void setText(const string& text);
    void removeLowerCase();
    void removeWordsGreaterThanN(const int N);
    void printWordSequence(const string& text);
};
 
#endif // STRINGCLASS_H


source
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <cctype>
#include <cstring>
#include "stringclass.h"
 
StringClass::StringClass() {}
 
StringClass::~StringClass() {}
 
const string StringClass::getText() const {
    return this->text;
}
 
void StringClass::setText(const string& text) {
    this->text = text;
}
 
void StringClass::removeLowerCase() {
    string temp = getText();
    string result = "";
 
    for (int i = 0; temp[i] != '\0'; i++)
    {
        if (!islower(temp[i]))
        {
            result += temp[i];
        }
    }
    setText(result);
}
 
void StringClass::removeWordsGreaterThanN(const int N) {
    string temp = getText();
    string result = "";
 
    for (int i = 0, j = 0, counter = 1; temp[i] != '\0'; i++)
    {
        if(isalpha(temp[i]))
        {
            j = i;
 
            for ( ; temp[j] != '\0' && isalpha(temp[j]); j++)
            {
                counter++;
            }
 
            if (counter <= N)
            {
                for ( ; i < j; i++)
                {
                    result += temp[i];
                }
            }
            counter = 0;
            i = j;
        }
        result += temp[i];
    }
 
    setText(result);
}
 
void StringClass::printWordSequence(const string& text) {
    string temp = getText();
    int counter = 0;
 
    for (int i = 0, j = 0; temp[i] != '\0'; i++)
    {
        j = i;
 
        if (isalpha(temp[j]))
        {
            while(isalpha(temp[j]) && temp[j] != '\0')
            {
                j++;
            }
 
            counter++;
 
            if (temp.substr(i, text.size()).compare(text) == 0)
            {
                cout << counter << endl;
            }
        }
 
        i = j;
    }
}


Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stringclass.h"
 
int main()
{
    StringClass stringClass;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.removeLowerCase();
    cout << stringClass.getText() << endl;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.removeWordsGreaterThanN(4);
    cout << stringClass.getText() << endl;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.printWordSequence("have");
 
    return 0;
}


output
Кликните здесь для просмотра всего текста
Код
in: "Hello, Siri! Hi, I have a boyfriend!"
out: "H, S! H, I   !"

in: "Hello, Siri! Hi, I have a boyfriend!"
out: ", Siri! Hi, I have a !"

in: "Hello, Siri! Hi, I have a boyfriend!"
out: 5
0
Max_Timokhin
6 / 6 / 1
Регистрация: 14.11.2016
Сообщений: 45
28.03.2017, 22:30  [ТС] 5
0xb01e0, спасибо! А как это оформить в одно целое? Чтоб был листинг программы, которую можно запустить.
0
0xb01e0
3 / 3 / 4
Регистрация: 27.03.2017
Сообщений: 11
Завершенные тесты: 1
28.03.2017, 22:43 6
Цитата Сообщение от Max_Timokhin Посмотреть сообщение
А как это оформить в одно целое? Чтоб был листинг программы, которую можно запустить.
смотря в какой среде работаешь, нужно чтобы все эти три файла находились в одной папке, руками компиляцию можно выполнить так:
для unix систем:
Bash
1
g++ *.cpp && ./a.out
для винды:
Bash
1
g++ *.cpp && ./a.exe
0
Max_Timokhin
6 / 6 / 1
Регистрация: 14.11.2016
Сообщений: 45
28.03.2017, 22:48  [ТС] 7
0xb01e0, для винды. Возможно ли так, чтоб это все было одним кодом записано и выводилось на консоли? То есть, в одном файле чтоб все это было.
0
0xb01e0
3 / 3 / 4
Регистрация: 27.03.2017
Сообщений: 11
Завершенные тесты: 1
28.03.2017, 23:05 8
Лучший ответ Сообщение было отмечено Max_Timokhin как решение

Решение

Цитата Сообщение от Max_Timokhin Посмотреть сообщение
чтоб это все было одним кодом записано и выводилось на консоли
сделал в один файл, держи:
Кликните здесь для просмотра всего текста
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <cctype>
#include <cstring>
 
using namespace std;
 
class StringClass
{
private:
    string text;
 
public:
    StringClass() {}
    ~StringClass() {}
 
    const string getText() const
    {
        return this->text;
    }
 
    void setText(const string& text)
    {
        this->text = text;
    }
 
    void removeLowerCase()
    {
        string temp = getText();
        string result = "";
     
        for (int i = 0; temp[i] != '\0'; i++)
        {
            if (!islower(temp[i]))
            {
                result += temp[i];
            }
        }
        setText(result);
    }
 
    void removeWordsGreaterThanN(const int N)
    {
        string temp = getText();
        string result = "";
     
        for (int i = 0, j = 0, counter = 1; temp[i] != '\0'; i++)
        {
            if(isalpha(temp[i]))
            {
                j = i;
     
                for ( ; temp[j] != '\0' && isalpha(temp[j]); j++)
                {
                    counter++;
                }
     
                if (counter <= N)
                {
                    for ( ; i < j; i++)
                    {
                        result += temp[i];
                    }
                }
                counter = 0;
                i = j;
            }
            result += temp[i];
        }
     
        setText(result);
    }
 
    void printWordSequence(const string& text)
    {
        string temp = getText();
        int counter = 0;
     
        for (int i = 0, j = 0; temp[i] != '\0'; i++)
        {
            j = i;
     
            if (isalpha(temp[j]))
            {
                while(isalpha(temp[j]) && temp[j] != '\0')
                {
                    j++;
                }
     
                counter++;
     
                if (temp.substr(i, text.size()).compare(text) == 0)
                {
                    cout << counter << endl;
                }
            }
     
            i = j;
        }
    }
};
 
int main()
{
    StringClass stringClass;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.removeLowerCase();
    cout << stringClass.getText() << endl;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.removeWordsGreaterThanN(4);
    cout << stringClass.getText() << endl;
 
    stringClass.setText("Hello, Siri! Hi, I have a boyfriend!");
    stringClass.printWordSequence("have");
 
    return 0;
}
0
Mournful Max
Велосипедист...
346 / 213 / 74
Регистрация: 15.12.2015
Сообщений: 784
Завершенные тесты: 1
28.03.2017, 23:08 9
0xb01e0,
Цитата Сообщение от Max_Timokhin Посмотреть сообщение
Разработать класс String для работы со строками
Цитата Сообщение от 0xb01e0 Посмотреть сообщение
header
C++
1
2
3
class StringClass {
private:
  string text;
Гениально)
0
Max_Timokhin
6 / 6 / 1
Регистрация: 14.11.2016
Сообщений: 45
28.03.2017, 23:10  [ТС] 10
0xb01e0, спасибо большое!
0
28.03.2017, 23:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2017, 23:10

Создайте класс String для работы со строками
народ помогите пожалуйста, классы тяжко даются:( 1. код корректен? 2. не...

Класс для работы со строками CString
Написать текстовый редактор с параметрами 1. Вставка в начало 2. Копирование...

Реализовать класс для работы со строками
Пожалуйста помогите с заданием Необходимо реализовать класс TString. В...


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

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

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