Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибки в функции реверса каждого слова строки / 25 сообщений из 151, страница 1 из 7
17.02.2014, 20:32
    #38563644
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Код: plaintext
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.
#include <iostream>
#include <string.h>
using namespace std;

char *reverse (char *line){
    int n, m=0;
    int l=strlen(line);

    while (*line!='\0') {
    for (int i=0; i<l; i++) {if ((char)line[i]==' ') {
    n=i;
    int d=i+n-m;
    for (i=m; i<n; i++) {
    line[i]=line[d--];
    }
    m=n+1;
    }
    }
    return line;
}

int main()

    {
    cout << reverse ("Hello world hi russia")<< endl;
    return 0;
}


---компилятор выдает что чтото из скоюками в мейне:
Код: plaintext
1.
2.
3.
\tttt\main.cpp||In function 'char* reverse(char*)':|
\tttt\main.cpp|24|error: a function-definition is not allowed here before '{' token|
\tttt\main.cpp|27|error: expected '}' at end of input|
||=== Build finished: 2 errors, 0 warnings ===|
Кроме того там надо добавить пробел в конце строки что передается в определение функции, и потом конечно ее удалить при ретурне? Да и не знаю вообще ли правильный замысел по сути?
...
Рейтинг: 0 / 0
17.02.2014, 20:47
    #38563656
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
В ф-и reverse "{" - 5 штук, "}" - 4 штуки.

Если бы вы применяли хотя бы зачатки форматирования кода, то вы бы это увидели даже не компилируя.
Пишите каждый оператор на отдельной строке.
После открывающей { делайте отступ вложенного текста на 4 пробела.
Перед закрывающей } возвращайтесь на предыдущий уровень отступа, так что } по вертикали выровнена с оператором к которому она относится.

Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
char *reverse (char *line)
{
    int n, m=0;
    int l=strlen(line);

    while (*line!='\0') {
        for (int i=0; i<l; i++) {
            if ((char)line[i]==' ') {
                n=i;
                int d=i+n-m;
                for (i=m; i<n; i++) {
                    line[i]=line[d--];
                }
                m=n+1;
            }
        }
        return line;
    }
...
Рейтинг: 0 / 0
17.02.2014, 21:41
    #38563688
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Anatoly Moskovsky,

Остаётся лишь добавить, что многие современные редакторы и IDE делают такое форматирование автоматически.
...
Рейтинг: 0 / 0
17.02.2014, 21:45
    #38563689
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stut,

Ну, и предвосхищая дальнейшие вопросы,

функция должна быть объявлена так:

Код: plaintext
1.
char* reverse (const char *line);



и переписана,

либо сигнатура оставлена такой, как есть, но при вызове нужно выделять доп. буфер.

В существующем виде функция не должна компилироваться нормальным компилятором,
а если и скомпилируется, то завершится аварийно в процессе работы.
...
Рейтинг: 0 / 0
17.02.2014, 22:06
    #38563702
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Как она вообще работает? При реверсе слова надо доходить только до половины
иначе будет "двойной реверс". Тоесть никакого эффекта.
...
Рейтинг: 0 / 0
17.02.2014, 22:11
    #38563706
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
\tttt\main.cpp||In function 'char* reverse(const char*)':|
\tttt\main.cpp|14|error: assignment of read-only location '*(line + ((unsigned int)i))'|
\tttt\main.cpp|19|error: invalid conversion from 'const char*' to 'char*'|
\tttt\main.cpp|24|error: a function-definition is not allowed here before '{' token|
\tttt\main.cpp|27|error: expected '}' at end of input|
||=== Build finished: 4 errors, 0 warnings ===|
---Такие ошибки появляются после добавление---const--то есть дело лиш утрудняется.Да и ошибки 24 и 27-срок к чему, как и разрешыть? Хотя главный вопрос что в общем сделать чтобы код скомпилировался и запустился?
...
Рейтинг: 0 / 0
17.02.2014, 22:32
    #38563717
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Код: plaintext
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.
#include <iostream>
#include <string.h>
using namespace std;

char *reverse (char *line){
    int n, m=0;
    int l=strlen(line);

    for (int i=0; i<l; i++) {if ((char)line[i]==' ' || (char)line[i]=='\0')
    n=i;
    int d=i+n-m;
    for (i=m; i<(n-m)/2; i++) {
    line[i]=line[d--];
    }
    m=n+1;
    }

    return line;
}

int main()

    {
    cout << reverse ("Hello world hello world")<< endl;
    return 0;
}



Модератор: Пользуйся тегом SRC...

Да после удаление одной из закрывающихся скобок компилится но при запуске зависает?
Да и смену слова до лиш до середины поменяли?
Можеш там вайл лишний? Надо наверное написать через ОR--if line[i]==' ' || line[i]=='\0?Тогда пробел не надо в конце добавлять? То есть тогда код упрощается даже очень а не работает?
...
Рейтинг: 0 / 0
17.02.2014, 23:44
    #38563752
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stutМожеш там вайл лишний?
Нет, там другая ошибка. Проходи его пошагово, смотри значения всех переменных на каждом
шагу, рисуй на листочке бумаги как изменяется строка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.02.2014, 23:50
    #38563755
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Dimitry Sibiryakov,
да вы уже подскажите (это какой то там +.-1 или синтаксис не тот),
ибо это задание сейчас для меня не актуально,
хотя дело хочется довести до конца,
ибо где то на 80% задача сделана,
и подобных решений не встречал,
хотя такой замысел у меня касательно такого задание был
уже давно когда стыкнулся с такой задачей,
да и здесь чистая алгоритмизация от а до я.
До бумажки и рисование вряд ли дойдет сейчас.
...
Рейтинг: 0 / 0
18.02.2014, 00:14
    #38563763
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stutэто задание сейчас для меня не актуально,
хотя дело хочется довести до конца,
Вот когда станет актуально, тогда и доведёшь. Как - я уже подсказал: пошаговым выполнением
с контролем переменных и рисованием на бумажке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.02.2014, 00:24
    #38563768
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stut, это вопрос чести. Ты не можешь бесконечно просить других за тебя что-то делать.
...
Рейтинг: 0 / 0
18.02.2014, 00:38
    #38563774
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Код: plaintext
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.
#include <iostream>
#include <string.h>
using namespace std;

char *reverse (char *line)
{
    int n, m=0;
    int l=strlen(line);

    for (int i=0; i<l; i++) 
    {
        if ((char)line[i]==' ' || (char)line[i]=='\0')
        {
            n=i;
            int d=(n-1);
            for (int j=m; j<(n-m-1)/2; j++) 
            {
                line[j++]=line[d--];
            }
            m=n+1;
        }
    }

    return line;
}

int main()
{
  cout << reverse ("Hello world hello world")<< endl;
  return 0;
}


---уже даже так переделал и ничего не помагает там d-переменная была лишняя и надо было другую итерационную- j
...
Рейтинг: 0 / 0
18.02.2014, 00:39
    #38563775
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stut---Такие ошибки появляются после добавление---const--то есть дело лиш утрудняется.Да и ошибки 24 и 27-срок к чему, как и разрешыть? Хотя главный вопрос что в общем сделать чтобы код скомпилировался и запустился?

А кто тебе говорил, что достаточно будет ТОЛЬКО добавить const ?
...
Рейтинг: 0 / 0
18.02.2014, 00:47
    #38563781
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
stut
Код: plaintext
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.
#include <iostream>
#include <string.h>
using namespace std;

char *reverse (char *line)
{
    int n, m=0;
    int l=strlen(line);

    for (int i=0; i<l; i++) 
    {
        if ((char)line[i]==' ' || (char)line[i]=='\0')
            n=i;
        int d=(n-1);
        for (int j=m; j<(n-m-1)/2; j++) 
        {
            line[j++]=line[d--];
        }
        m=n+1;
    }

    return line;
}

int main()
{
  cout << reverse ("Hello world hello world")<< endl;
  return 0;
}


---уже даже так переделал и ничего не помагает там d-переменная была лишняя и надо было другую итерационную- j

Ты скобочки-то не забыл добавить ?
Может, переусердствовал, убираючи ?

Модератор: Я добавил скобочки....
...
Рейтинг: 0 / 0
18.02.2014, 02:22
    #38563803
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Ne rabotaet dalee, doballyay ne dobavlyay skobki?
...
Рейтинг: 0 / 0
18.02.2014, 04:36
    #38563819
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
MasterZivфункция должна быть объявлена так:


Код: plaintext
1.
char* reverse (const char *line);





только хотел написать )

stut, а зачем вы делаете приведение ? сейчас сам проверю, пока не понятно
Код: plaintext
1.
((char)line[i]==' '
...
Рейтинг: 0 / 0
18.02.2014, 04:54
    #38563821
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Мне вообще ваша функция не нравится, она не самая красивая. Нужно провести декомпозицию задачи.
1.Реверс одного слова
2.Определить что слово закончилось и есть ли следующее
3. Цикл по массиву указателей на строку
4. вывод
5. Пока не понятно и не нравится названия переменных(l выглядит как единица), непонятно где и что вы храните.

Через 1 час 20 минут попробую переписать.
Вы сами её делали ?

Кстати, откройте пока K&R главу 5.11. Там рассказывается про argc и argv, задачи чем-то похожи. Или посмотрить код функции echo, может сами сделаете пока меня тут не будет, и старшие товарищи спят
...
Рейтинг: 0 / 0
18.02.2014, 04:59
    #38563822
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
maytonstut, это вопрос чести. Ты не можешь бесконечно просить других за тебя что-то делать.


простите, не заметил сразу :(

значит не буду помогать, извините stut, и вообще искать самому ошибки интересно ! отлично проведённое время, вы ведь будете разбирать алгоритм, а не какую-нибудь ерунду!
...
Рейтинг: 0 / 0
18.02.2014, 06:33
    #38563829
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Я уже решил вашу задачу. Делайте её быстрее пожалуйста, я хочу выложить сюда свою версию. Правда я написал код заново, ваш мне совсем не нравится. У меня получилось 10 строчек примерно, правда мне интересно как прокомментируют один мой ход один, потому решайте же быстрее stut ! У вас получится )
...
Рейтинг: 0 / 0
18.02.2014, 06:34
    #38563830
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Всё оказалось даже проще чем я думал
...
Рейтинг: 0 / 0
18.02.2014, 06:38
    #38563831
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
...
Рейтинг: 0 / 0
18.02.2014, 07:06
    #38563836
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
не то, сейчас исправлю
...
Рейтинг: 0 / 0
18.02.2014, 07:18
    #38563841
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Отличный пример, мне очень нравится ))) Переделал !
...
Рейтинг: 0 / 0
18.02.2014, 11:45
    #38564185
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
SashaMercuryПравда я написал код заново, ваш мне совсем не нравится.
Вы прямо уже как настоящий программист стали :)
...
Рейтинг: 0 / 0
18.02.2014, 13:34
    #38564456
stut
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибки в функции реверса каждого слова строки
Не понимаю что там у вас получилось лиш консоль видно. Мне сейчас это не так надо. Если бы получалось не делал бы тему на форуме. Вам может не нравится но здесь не надо знать никакие указатели и т.д. Идея проста. Идем по символах строки до пробела/конца. Если находим маркируем как n и меняем предыдущие символы в обратном порядке. Потом маркируем начало след. Слова m=n+1, и находим следующий пробел (n=i) и меням местами буквы. И т.д. может так первый цыкл for-не вяжется с каждым отдельным словом. Может m-я не определяю в нужном блоке. Может лайн меняется во влож. цыкле но не выходет из него хотя было бы то же самое что без реверса?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибки в функции реверса каждого слова строки / 25 сообщений из 151, страница 1 из 7
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]