Форум программистов, компьютерный форум CyberForum.ru

Метод класса строки - C++

Восстановить пароль Регистрация
 
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
07.12.2012, 23:44     Метод класса строки #1
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
//Длина L кратна 4-м, то выделяется подстрока после последнего пробела;
    void String::run()
    {
        unsigned int i=0, j=0;
        char *ss;
        ss = new char [MAX];
        ss[0]='\0';
 
        if(fmod(strlen(str),4)==0) 
        {       
            //zanosim simvoli v obratno poryadke
            for(i=strlen(str);i!='s';i--)
            {
                ss[j]=str[i];
                j++;
            }
 
            //stroka-perevertish
            for(i=0;i=strlen(ss);i++)
            {
                str[j]=ss[i];
                j++;
            }
            
            delete [] ss;
        }
Добавлено через 14 минут
}
//Не скопировал сюда

Добавлено через 23 часа 28 минут
Поднимаю.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
07.12.2012, 23:50     Метод класса строки #2
А что требуется?
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
08.12.2012, 00:12  [ТС]     Метод класса строки #3
Цитата Сообщение от Dani Посмотреть сообщение
А что требуется?
//Метод решает задачу: если длина строки L кратна 4-м, то выделяется подстрока после последнего пробела;

Добавлено через 19 минут
Собственно ошибка в этой строчке:
C++
1
2
3
4
5
6
            //zanosim simvoli v obratno poryadke
            for(i=strlen(str);i!='s';i--)
            {
                ss[j]=str[i];
                j++;
            }
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
08.12.2012, 00:32     Метод класса строки #4
C++
1
for(i=0;i=strlen(ss);i++)
мб
C++
1
for(i=0;i==strlen(ss);i++)
?

Добавлено через 1 минуту
и i=strlen(str)
при обращении к массиву выйдет за его границы. надо i = strlen(str) - 1

Добавлено через 3 минуты
Стоп, я не понял. Вы интовую переменную сравниваете с char? И у вас это еще вдобавок как условие в цикле?
C++
1
for(i=strlen(str);i!='s';i--)
В чем логика?
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
08.12.2012, 00:53  [ТС]     Метод класса строки #5
Цитата Сообщение от MrGluck Посмотреть сообщение
мб
C++
1
for(i=0;i==strlen(ss);i++)
?

Добавлено через 1 минуту
и i=strlen(str)
при обращении к массиву выйдет за его границы. надо i = strlen(str) - 1

Добавлено через 3 минуты
Стоп, я не понял. Вы интовую переменную сравниваете с char? И у вас это еще вдобавок как условие в цикле?

В чем логика?
Нет, не 's'. Я его случайно добавил. Должно быть i!=' '.

Добавлено через 4 минуты
Даже если и "i = strlen(str) - 1", то все равно ошибка.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
08.12.2012, 01:02     Метод класса строки #6
9cbka, а
C++
1
for(i=0;i==strlen(ss);i++)
вы исправили?
И что за ошибка?
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
08.12.2012, 02:12  [ТС]     Метод класса строки #7
Цитата Сообщение от MrGluck Посмотреть сообщение
9cbka, а
C++
1
for(i=0;i==strlen(ss);i++)
вы исправили?
И что за ошибка?
Нет, не исправил. Я хочу реализовать поставленное условие так: начиная с посл. символа считываю до первого пробела, а потом переворачиваю строку.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
08.12.2012, 02:38     Метод класса строки #8
Цитата Сообщение от 9cbka Посмотреть сообщение
Нет, не исправил. Я хочу реализовать поставленное условие так: начиная с посл. символа считываю до первого пробела, а потом переворачиваю строку.
Вам твердят, что неверно же.
У вас в проверке на условие выхода из цикла не выполняется сравнение i и strlen(ss), а идет присваивание второго первому.

Добавлено через 15 минут
9cbka, это поможет тебе в решении:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cstring>
 
 
int main()
{
    char x[20];
    std::cin.getline(x, 20);
    char y[20];
    int j = 0;
    for (int i = strlen(x) - 1; i >=0 && x[i] != ' '; i--)
        y[j++] = x[i];
    std::cout << y;
}
activnaya
 Аватар для activnaya
255 / 45 / 2
Регистрация: 24.11.2012
Сообщений: 466
08.12.2012, 02:50     Метод класса строки #9
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
 
int main()
{
    std::string str("this is a string");
    size_t found = str.find_last_of (" ");
    std::cout << str.substr (found + 1) << '\n';
 
    return 0;
}
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
08.12.2012, 03:24  [ТС]     Метод класса строки #10
Цитата Сообщение от MrGluck Посмотреть сообщение
Вам твердят, что неверно же.
У вас в проверке на условие выхода из цикла не выполняется сравнение i и strlen(ss), а идет присваивание второго первому.

Добавлено через 15 минут
9cbka, это поможет тебе в решении:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cstring>
 
 
int main()
{
    char x[20];
    std::cin.getline(x, 20);
    char y[20];
    int j = 0;
    for (int i = strlen(x) - 1; i >=0 && x[i] != ' '; i--)
        y[j++] = x[i];
    std::cout << y;
}
По этому коду, должно быть:
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
 void String::run()
    {
        unsigned int i=0, j=0;
        char *ss;
        ss = new char [MAX];
        ss[0]='\0';
 
        if(fmod(strlen(str),4)==0) 
        {       
            //zanosim simvoli v obratno poryadke
            for(i=strlen(str)-1;(i>=0&&str[i]!=' ');i--)
            {
                ss[j]=str[i];
                j++;
            }
 
            //stroka-perevertish
            for(i=0;i=strlen(ss);i++)
            {
                str[j]=ss[i];
                j++;
            }
            
            delete [] ss;
        }
}
Но это не верно. Вот весь код программы:
Кликните здесь для просмотра всего текста
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream.h>
#include <istream.h> //dlya cin.getline()
#include <string.h>
#include <conio.h>
#include <fstream.h>
#include <math.h> 
 
///////////////////////////////////////
const int MAX=255;
 
class String
{
    private:
        char *str;
        char *strend;
    public:
        String()
        {
            str = new char [MAX];
            str[0]='\0';
            strend = new char [MAX];
            strend[0]='\0';
            //cout << "Constructor!";
        }
//-------------------------------------
        void set();//metod vvoda ish. stroki
        void print();//metod pechati
        void run();//metod vipolneniya zadachi 
        void printend();//metod pechati strend
//-------------------------------------
        String& operator= (String&ss)
        {
            strcpy(strend, ss.str);
            return *this;
        }
//-------------------------------------
        ~String()
        {
            delete []str;
            delete []strend;
            //cout << "Destructor!";
        }
};
//-------------------------------------
 void String::run()
    {
        unsigned int i=0, j=0;
        char *ss;
        ss = new char [MAX];
        ss[0]='\0';
 
        if(fmod(strlen(str),4)==0) 
        {       
            //zanosim simvoli v obratno poryadke
            for(i=strlen(str)-1;(i>=0&&str[i]!=' ');i--)
            {
                ss[j]=str[i];
                j++;
            }
 
            //stroka-perevertish
            for(i=0;i=strlen(ss);i++)
            {
                str[j]=ss[i];
                j++;
            }
            
            delete [] ss;
        }
}
//-------------------------------------
    void String::set()
    {
        cout << "Vvedite stroku: ";
        char *stroka = new char [MAX];
        stroka[0]='\0';
        cin.getline(stroka,MAX);
        for(unsigned int i=0;i<strlen(stroka);i++)
        {
            str[i] = stroka[i];
        }
        str[i]='\0';
        delete []stroka;
    }
//-------------------------------------
    void String::print()
    {
        ofstream file("file.txt", ios::app);
        for (unsigned int i=0; i<strlen(str); i++) 
        {
             cout << str[i];
        }
 
 
        file << endl;
        for (i=0; i<strlen(str); i++) 
        {
             file << str[i];
        }
    }
//-------------------------------------
    void String::printend()
    {
        cout << "\nSkopirovannaya stroka: ";
 
        for (unsigned int i=0; i<strlen(strend); i++) 
        {
             cout << strend[i];
        }
    }
//-------------------------------------
 
//////////////////////////////////////////////
void main(void)
{
    ofstream file("file.txt", ios::out);
 
    String s1,s2;
 
    s1.set();
    s1.print();
    s1.run();
    s1.print();
 
    s2=s1;
 
    s2.printend();
 
    cout << "\n" << endl;
 
    String *s3,*s4;
    s3=new String; s4=new String;
    s3->set();
    s3->print();
    s3->run();
    s3->print();
 
    *s4=*s3;
 
    s4->printend();
 
    cout << "\n" << endl;
 
    getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2012, 17:50     Метод класса строки
Еще ссылки по теме:

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную C++
C++ Как передать в метод класса Menu указатель на метод дочернего класса?
Может ли метод родительского класса обратиться к полю дочернего класса C++

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

Или воспользуйтесь поиском по форуму:
9cbka
2 / 2 / 0
Регистрация: 13.10.2012
Сообщений: 60
09.12.2012, 17:50  [ТС]     Метод класса строки #11
Поднимаю
Yandex
Объявления
09.12.2012, 17:50     Метод класса строки
Ответ Создать тему
Опции темы

Текущее время: 23:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru