Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 00:14   #1
Macb3th
 
Регистрация: 29.03.2010
Сообщений: 9
По умолчанию Циклический сдвиг, ошибка вывода.

Задание сдвинуть строку вправо на 1 символ. В консоле после вывода пусто (выглядит так: "row has been sorted: ").

Код:
#include "stdafx.h"
#include <iostream>
#include <iostream>
#include "row.h"
using namespace std;
 
void main()
{
        char str[10] = ("abcde");
        DRow *v = new DRow(str);
 
        cout << "\r\n";
        cout << "Kolichestvo simvolov v stroke " << v->Lenght()<<endl;
        cout << "\r\n";
 
        v->SortSymb();
//----------------class------------------
class Row
{
protected:
        char *data;
public:
        Row(char *v);
        ~Row();
        int Lenght();
};
 
class DRow: public Row
{
public: 
        DRow(char *v): Row(v){};
        ~DRow();
        char SortSymb();
};
//---------------methods------------------
#include "stdafx.h"
#include <string.h>
#include "row.h"
#include <iostream>
using namespace std;
 
Row::Row(char *v)
{
        data = v;
}
 
int Row::Lenght()
{
        int len;
        len = strlen(data);
        return len;
}
 
char DRow::SortSymb()
{
        char tmp;
        //char c;
 
        //data[strlen(data)] = c;
 
        for(int i = 0; i < 1; i++)
        {
                tmp = data[strlen(data)];
                for(int j = strlen(data); j > 0; j--)
                {
                        data[0] = tmp;
                }
        }
        //data[0] = c;
        cout<<"row has been sorted: "<<data<<endl;
        return 0;
}
}
Подскажите, пожалуйста, как исправить ошибку.
Macb3th вне форума Ответить с цитированием
Старый 30.03.2010, 00:35   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
        for(int i = 0; i < 1; i++)
        {
                tmp = data[strlen(data)];
                for(int j = strlen(data); j > 0; j--)
                {
                        data[0] = tmp;
                }
        }
Во-первых, что-то у вас до ужаса странное с этими циклами... Зачем вы их вообще используете и что хотите сделать?
Во-вторых, ваша функция делает следующее:
Код:
tmp = data[strlen(data)];
Присваивает значение символа, следующего за последним (т.к. нумерация начинается с нуля, то последний символ - data[strlen(data)]), а именно - символа-терминатора '\0'.
Код:
data[0] = tmp;
Делает первым символом строки символ конца строки!
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.03.2010, 00:43   #3
Macb3th
 
Регистрация: 29.03.2010
Сообщений: 9
По умолчанию

Чёрт, забыл написать. Надо сдвинуть на один символ вправо и 1-ому символу присвоить последний. К примеру строка "abcde" должна стать "eabcd". Цикл брал где-то с Паскалевского примера. Задание там было идентичное.

Переделал цикл, так кажется лучше. Теперь выводит: "ebbcd"
for(int i = 0; i < 1; i++)
{
tmp = data[strlen(data) - 1];
for(int j = strlen(data) - 1; j > 1; j--)
{
//data[j+1] = tmp;
//tmp = data[j-1];
data[j] = data[j-1];
//data[j] = tmp;
}
}
data[0] = tmp;
cout<<"row has been sorted: "<<data<<endl;
return 0;

Всё, сделал. Цикл получился таким:
tmp = data[strlen(data) - 1];
for(int j = strlen(data) - 1; j > 0; j--)
{
data[j] = data[j-1];
}
data[0] = tmp;

Последний раз редактировалось Macb3th; 30.03.2010 в 09:33.
Macb3th вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59
Циклический сдвиг маирицы на С++ Svetlaya Помощь студентам 0 06.06.2009 22:31
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11
циклический сдвиг массива goacher Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2008 22:26