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

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

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

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

10.05.2012, 19:02. Просмотров 1198. Ответов 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. (C++):

Функция 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...

Дана строка. Подсчитать сколько раз первая строка входит во вторую - C++
Дана строка. Подсчитать сколько раз первая строка входит во вторую. Например: вводим &quot;при&quot; (строка должна вводиться с клавиатуры, как на...

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

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

Дан символ С и строка 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; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6366 / 5930 / 1923
Регистрация: 18.12.2011
Сообщений: 15,239
Завершенные тесты: 1
10.05.2012, 19:14 #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  [ТС] #3
Там еще больше ошибок. К примеру тогда придется вводить посимвольно. Это не дело, там 500 символов может быть. Т.е. копировать массивы строк необходимо в цикле?
zss
Модератор
Эксперт С++
6366 / 5930 / 1923
Регистрация: 18.12.2011
Сообщений: 15,239
Завершенные тесты: 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;
}
Однако, сомнительно, что именно это хотелось.
Уточните, что надо было?
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:03  [ТС] #5
Задача: разбить текст на строки по 50 символов, разбиение по пробелу.
zss
Модератор
Эксперт С++
6366 / 5930 / 1923
Регистрация: 18.12.2011
Сообщений: 15,239
Завершенные тесты: 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;
}
Prin53
2 / 2 / 0
Регистрация: 28.02.2012
Сообщений: 117
10.05.2012, 21:20  [ТС] #7
Ага, с примером можно сделать по другому.

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

дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка должна вводиться с клавиатуры. - C++
Будьте добры,помогите с решением задачи: дана строка, изображающая целое положительное число. Вывести сумму цифр этого числа. Строка...

Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо и справа н - C++
Дана строка символов до точки. Составить программу, проверяющую, является ли данная строка палиндромом, т. е. читается ли она слева направо...

Даны строка S, символ C и строка S0. Необходимо после каждого вхождения символа C в строку S вставить строку S0 - C++
Есть код... string s, s0; char c; cout &lt;&lt; &quot;Введите строку s, s0 и символ c: &quot;; getline(cin, s); ...

Строка string и строка char - C++
Ребят помогиме. В общем задание такое дана строка типа string и строка char которая содержит символ к. В общем если в строке типа String ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.05.2012, 21:21
Ответ Создать тему
Опции темы

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