powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибки в функции реверса каждого слова строки
25 сообщений из 151, страница 1 из 7
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #38563688
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

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

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

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

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



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

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

В существующем виде функция не должна компилироваться нормальным компилятором,
а если и скомпилируется, то завершится аварийно в процессе работы.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38563702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как она вообще работает? При реверсе слова надо доходить только до половины
иначе будет "двойной реверс". Тоесть никакого эффекта.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #38563752
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutМожеш там вайл лишний?
Нет, там другая ошибка. Проходи его пошагово, смотри значения всех переменных на каждом
шагу, рисуй на листочке бумаги как изменяется строка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38563755
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
да вы уже подскажите (это какой то там +.-1 или синтаксис не тот),
ибо это задание сейчас для меня не актуально,
хотя дело хочется довести до конца,
ибо где то на 80% задача сделана,
и подобных решений не встречал,
хотя такой замысел у меня касательно такого задание был
уже давно когда стыкнулся с такой задачей,
да и здесь чистая алгоритмизация от а до я.
До бумажки и рисование вряд ли дойдет сейчас.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38563763
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stutэто задание сейчас для меня не актуально,
хотя дело хочется довести до конца,
Вот когда станет актуально, тогда и доведёшь. Как - я уже подсказал: пошаговым выполнением
с контролем переменных и рисованием на бумажке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38563768
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut, это вопрос чести. Ты не можешь бесконечно просить других за тебя что-то делать.
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #38563775
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stut---Такие ошибки появляются после добавление---const--то есть дело лиш утрудняется.Да и ошибки 24 и 27-срок к чему, как и разрешыть? Хотя главный вопрос что в общем сделать чтобы код скомпилировался и запустился?

А кто тебе говорил, что достаточно будет ТОЛЬКО добавить const ?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #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
Ошибки в функции реверса каждого слова строки
    #38563803
stut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ne rabotaet dalee, doballyay ne dobavlyay skobki?
...
Рейтинг: 0 / 0
Ошибки в функции реверса каждого слова строки
    #38563819
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivфункция должна быть объявлена так:


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





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

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

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

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


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

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


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