Помогите найти ошибку

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
akafanta
Сообщения: 4
Зарегистрирован: 01 ноя 2009, 18:47

Что надо было:
Создать текстовую функцию main(), которая реализует след. алгоритм:
1. Объявить и ввести переменные.
2. Ввести строку tmp.
3. Выделить блок памяти через указатель.
4. Скопировать строку в выделенный блок
5. Обработать блок по условию.
6. Вывести результаты обработки
7. Освободить блок
Вводить и обрабатывать строки в цикле, пока не введена пустая строка.
Условие обработки строки (п.5):
Перемешивать по k букв. Например:
Было: abcd efgh i
При k = 4 должно получится:
dcba hgfe i

Что получилось:

Код: Выделить всё

#include <iostream>
#include <cstring>
using namespace std;

int main ()
{
	char tmp [80];
	char* p;
	int z(0);
	do
	{
		cout << "Enter the sentence: " << endl;
		cin >> tmp;
		z = strlen(tmp);
		p= new char[z+1];
		strcpy(p, tmp);
		char a;
  		char* pT = p;
		char* pE =pT+3;
		char* pN = (pT+z)-1;
		for (pT=p; pT < (pN-3);pT += 4, pE = pT + 3)
		{
			while(pT<pE)
			{
				
				a = *pT;
				*pT = *pE;
				pT++;
				*pE = a;
				pE--;
			}
		}
		cout << p << endl;
		delete [] p;
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Во-первых, в чём вопрос?

Во-вторых, ты привела не весь код - сразу бросается в глаза отсутствие баланса фигурных скобок.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
akafanta
Сообщения: 4
Зарегистрирован: 01 ноя 2009, 18:47

Я девушка :)
Перемешиваются только первые четыре буквы. Почему?
Последнюю скобку забыла.
IceFlame
Сообщения: 62
Зарегистрирован: 29 ноя 2009, 03:54

А оператор [] запрещен чтоли? Проблема в том, что pT увеличивается как в цикле for, так и в цикле while. Ну а вот мой вариант:

Код: Выделить всё

#include <iostream>
#include <cstring>
using namespace std;

int main ()
{
    char tmp [80];
    int k=4;
    char* p;
    int z=0;
    do
    {
        cout << "Enter the sentence: " << endl;
        cin >> tmp;
        z = strlen(tmp);
        if(z<=1) break;
        p= new char[z+1];
        strcpy(p, tmp);
        for(int i=0;i<z;i+=k)
        {
            int m;
            if((z-i)<k) m=z-i;
            else m=k;
            for(int j=0;j<m/2;j++)
            {
                char a=p[i+j];
                p[i+j]=p[i+m-j-1];
                p[i+m-j-1]=a;
            }
        }
        cout << p << endl;
        delete [] p;
    }
    while(1);
}
akafanta
Сообщения: 4
Зарегистрирован: 01 ноя 2009, 18:47

Ух ты! Спасибо!
Ответить