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

Строка. Ошибка С2228.

10.05.2012, 19:02. Просмотров 1398. Ответов 13
Метки нет (Все метки)

Выдает ошибку
left of '.copy' must have class/struct/union type
left of '.erase' must have class/struct/union type
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    char s1[1000],temp[100],s2[1000];
    int i;
    cout << "\nInput a text: ";
    cin >> s1;
    strcpy(s1,s2);
m:
    for (i = 50; ; i--)
        if (s2[i] == ' ')
        {
            s1.copy(temp,i);
            cout<<temp<<"\n";
            s2.erase(0,i);
            goto m;
        }
    return 0;
}
Что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 19:02
Ответы с готовыми решениями:

Функция sort и ошибка С2228
Доброго времени суток, пытаюсь постичь функцию sort на примере сортировки...

с2079 и с2228 ошибки при компиляции ниже участок кода, с которым праблема и скрины ошибки
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ bool game = true; // КЛАССЫ class Me; class...

Ошибка, где подчеркнутая строка
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; #include &lt;string&gt; #include &lt;conio.h&gt; ...

Не могу понять в чем ошибка и как её исправить. (16 строка)
#include &lt;iostream&gt; using namespace std; class address { private: ...

Дана строка. Подсчитать сколько раз первая строка входит во вторую
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например:...

13
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 19:14 2
char - это не строка, а массив символов, заканчивающийся нулем.
Соотв. методов copy, erase у массива нет.
Если хочется работать со строками из библиотеки STL,
то объявить их надо так
C++
1
string s1,temp,s2;
и strcpy(s1,s2);
надо заменить на
s1=s2;
1
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 19:22  [ТС] 3
Там еще больше ошибок. К примеру тогда придется вводить посимвольно. Это не дело, там 500 символов может быть. Т.е. копировать массивы строк необходимо в цикле?
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 20:55 4
Вот работающий код, который делает примерно то, что должен был делать
Ваш исходный
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string s1,temp,s2;
    int i;
    cout << "\nInput a text: ";
    char s[100];
    cin.getline(s,99);
    s1=s;
    s2=s1;//думаю это имелось ввиду
m:
    for (i = s2.length()-1;i>0 ; i--)
        if (s2[i] == ' ')
        {
            temp=s1.substr(0,i);
            cout<<temp<<"\n";
            s2.erase(0,i);
            goto m;
        }
        system("pause");
    return 0;
}
Однако, сомнительно, что именно это хотелось.
Уточните, что надо было?
1
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:03  [ТС] 5
Задача: разбить текст на строки по 50 символов, разбиение по пробелу.
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 21:06 6
Вот код, который выводит фрагменты строки разделенные пробелом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string temp,s2;
    int i;
    cout << "\nInput a text: ";
    char s[100];
    cin.getline(s,99);
    s2=s;
    for (i = 0;i<=s2.length();i++)
        if (s2[i] == ' '|| i==s2.length())
        {
            temp=s2.substr(0,i);
            cout<<temp<<"\n";
            s2.erase(0,i+1);
            i=0;
        }
    system("pause");
    return 0;
}
1
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:20  [ТС] 7
Ага, с примером можно сделать по другому.

Добавлено через 10 минут
Не выходит. Я запутался. Помогите, пожалуйста.
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 21:26 8
C++
1
2
3
4
5
6
7
if (s2[i] == ' '|| i==s2.length())// Проверяем очередной символ на пробел или на конец строки 
{ 
     temp=s2.substr(0,i); // выделяем подстроку до пробела 
     cout<<temp<<"\n"; 
     s2.erase(0,i+1);  // удаляем подстроку вместе с пробелом 
     i=0;  // начинаем считать сначала 
}
2
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:28  [ТС] 9
Сергей Сергеевич, спасибо, этот код ясен. А я переделываю его под мою задачу.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string temp,s2;
    int i;
    cout << "\nInput a text: ";
    char s[100];
    cin.getline(s,99);
    s2=s;
    for (i = 50;i>=0;i--)
        if (s2[i] == ' '|| i==s2.length())
        {
            temp=s2.substr(0,i);
            cout<<temp<<"\n";
            s2.erase(0,i+1);
            i=50;
        }
    system("pause");
    return 0;
}
Ничего не выводит.
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 21:33 10
Сделайте цикл вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
int CountChar=0;
for (i = 1;i<=s2.length();i++)
{
        if (s2[i] == ' '|| i==s2.length() || CountChar%50==0) 
        {
            temp=s2.substr(0,i);
            cout<<temp<<"\n";
            s2.erase(0,i+1);
            i=0;
        }
        CountChar++;
}
тогда каждый 50-й символ тоже будет заканчивать слово.
1
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:43  [ТС] 11
Задача: Разбить текст на строки не более 50 символов. И условие, что нельзя разбить на слове. Т.е. разделение - 50-символы до пробела. Вот так.
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
10.05.2012, 22:09 12
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    string temp,s2;
    int i,j;
    cout << "\nInput a text: ";
    char s[201];
    cin.getline(s,200);
    s2=s;
    j = s2.length()>50?50:s2.length();// берем либо 50, либо сколько осталось
    for (i=j;i>=0;i--)
    {
        if(j==s2.length()) // остаток строки<50
        {
            temp=s2.substr(0,i+1);
            cout<<temp<<"\n";
            break;
        }else if (s2[i] == ' ')
        {
            temp=s2.substr(0,i+1);
            cout<<temp<<"\n";
            s2.erase(0,i+1);
            j = s2.length()>50?50:s2.length();//снова берем либо 50, либо сколько осталось
            i=j; // начинаем цикл сначала
        }
    }
    system("pause");
    return 0;
}
1
Prin53
2 / 2 / 1
Регистрация: 28.02.2012
Сообщений: 117
11.05.2012, 19:29  [ТС] 13
А что значит вот эта строка?
C++
1
j = s2.length()>50?50:s2.length()
Откуда такой синтаксис?
0
zss
Модератор
Эксперт С++
7380 / 6779 / 4291
Регистрация: 18.12.2011
Сообщений: 17,914
Завершенные тесты: 1
11.05.2012, 21:21 14
Тернарный оператор присваивания.
Означает, проверить истинность выражения s2.length()>50,
если да, то j=50, иначе j= s2.length()
1
11.05.2012, 21:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 21:21

Дана строка символов. Проверьте,является ли данная строка палиндромом
Парни нужна помощь,нужен код решения этой задачи на языке с++. Дана строка...

Почему строка, считанная из файла и такая же строка в программе не равны, хотя они, вроде бы, одинаковы?
Есть две строки. MSK=&quot;Москва&quot; и from, считанная из текстовика, через...

Дан символ С и строка S. Перед каждым вхождением C в строку S вставить строку S. Где ошибка?
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;cmath&gt; #include&lt;string&gt; using...


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

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

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