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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
#1

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

10.05.2012, 19:02. Просмотров 1167. Ответов 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;
}
Что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 19:02     Строка. Ошибка С2228.
Посмотрите здесь:

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

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

Дан символ С и строка S. Перед каждым вхождением C в строку S вставить строку S. Где ошибка? - C++
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;cmath&gt; #include&lt;string&gt; using namespace std; int main() { string s,s0; ...

Командная строка ошибка - Assembler
по идее ос при вводе буквы A ос должна выводить на экран надпись lol,но он просто перескакивает в начало строки. и начинается тупо...

есть ли ошибка? командная строка - Bash
ls mkdir Каталог if test -d katalog1 then echo Каталог katalog1 существует else echo Каталог katalog1 не существует fi ...

Ошибка в RSS (Строка: 2, Символ: 0) - WordPress
Вот мой канал rss http://feeds.feedburner.com/Libiroo-blog Раньше все было нормально, сейчас выдает ошибку: Ошибка разбора XML:...

Бегущая строка, где ошибка? - JavaScript
В поле инпут вводим текст, по клику на кнопку go должна пойти бегущая строка в блоке div, не работает :( помогите найти ошибку ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 19:14     Строка. Ошибка С2228. #2
char - это не строка, а массив символов, заканчивающийся нулем.
Соотв. методов copy, erase у массива нет.
Если хочется работать со строками из библиотеки STL,
то объявить их надо так
C++
1
string s1,temp,s2;
и strcpy(s1,s2);
надо заменить на
s1=s2;
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 19:22  [ТС]     Строка. Ошибка С2228. #3
Там еще больше ошибок. К примеру тогда придется вводить посимвольно. Это не дело, там 500 символов может быть. Т.е. копировать массивы строк необходимо в цикле?
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 20:55     Строка. Ошибка С2228. #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;
}
Однако, сомнительно, что именно это хотелось.
Уточните, что надо было?
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:03  [ТС]     Строка. Ошибка С2228. #5
Задача: разбить текст на строки по 50 символов, разбиение по пробелу.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 21:06     Строка. Ошибка С2228. #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;
}
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:20  [ТС]     Строка. Ошибка С2228. #7
Ага, с примером можно сделать по другому.

Добавлено через 10 минут
Не выходит. Я запутался. Помогите, пожалуйста.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 21:26     Строка. Ошибка С2228. #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;  // начинаем считать сначала 
}
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:28  [ТС]     Строка. Ошибка С2228. #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;
}
Ничего не выводит.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 21:33     Строка. Ошибка С2228. #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-й символ тоже будет заканчивать слово.
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:43  [ТС]     Строка. Ошибка С2228. #11
Задача: Разбить текст на строки не более 50 символов. И условие, что нельзя разбить на слове. Т.е. разделение - 50-символы до пробела. Вот так.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
10.05.2012, 22:09     Строка. Ошибка С2228. #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;
}
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
11.05.2012, 19:29  [ТС]     Строка. Ошибка С2228. #13
А что значит вот эта строка?
C++
1
j = s2.length()>50?50:s2.length()
Откуда такой синтаксис?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 21:21     Строка. Ошибка С2228.
Еще ссылки по теме:

Ошибка в работе с StringBuilder - строка не меняется - C#
Строка не меняется... using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Ошибка сценария строка 39 символ 245 - Windows 7
Ошибка сценария строка 39 символ 245 данная ошибка выходит без конца, выходит она в разное время, при запуске, при простое, при работе

Командная строка открывается и закрывается в чем ошибка - Python
global_var=1 def funa(): print(&quot;Глобальная переменная&quot;,global_var) local_var=2 print(&quot;Локальная переменная&quot;,local_var) global...

Ошибка - Входная строка имела неверный формат - C#
static double f(double x) { double y; if (x &gt;= 0.9) y = 1 / Math.Pow(.1 + x, 2); ...

Командная строка открывается и закрывается в чем ошибка - Python
go=int(input(&quot;Enter&quot;)) if go&gt;10: print(&quot;Число введенное вами больше 10&quot;) elif go&lt;10: print(&quot;Число введенное вами меньше 10&quot;) ...


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

Или воспользуйтесь поиском по форуму:
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 1
11.05.2012, 21:21     Строка. Ошибка С2228. #14
Тернарный оператор присваивания.
Означает, проверить истинность выражения s2.length()>50,
если да, то j=50, иначе j= s2.length()
Yandex
Объявления
11.05.2012, 21:21     Строка. Ошибка С2228.
Ответ Создать тему
Опции темы

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