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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2012, 22:31   #1
mazzahaker
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 23
По умолчанию Обработка строк

Добрый вечер, я написала программу, но она не совсем верно работает, посмотрите пожалуйста, я ошибку найти не могу, тыкните мордочкой, очень вас прошу, спасибо=)
Задание само:
произвольный заданный текст вывести в виде абзаца с заданной длиной строки. При этом обозначить отступ от левого края в первой строка абзаца на заданное число позиций; размещение каждого слова целиком в одной и той же строке, (ликвидировать переносы, которые обозначены в тексте знаком "-" в конце строки)
Код:
#include "fstream"
#include "iostream"
#include "vector"

template<class Type>
struct myvec
{
	myvec()
	{
		val = nullptr;
		sz = 0;
	}

	Type& operator[](int n)
	{
		return val[n];
	}

	void push_back(Type t)
	{
		Type* tmp = new Type[sz + 1];
		memcpy(tmp, val, sizeof(Type) * sz);
		delete[] val;
		val = tmp;
		
		val[sz++] = t;
	}
	void push_front(Type t)
	{
		Type* tmp = new Type[sz + 1];
		memcpy(tmp + 1, val, sizeof(Type) * sz);
		
		delete[] val;
		val = tmp;
		val[0] = t;
		sz++;
	}
	void erase(size_t n)
	{
		n++;
		Type* tmp = new Type[sz - 1];
		memcpy(tmp, val, sizeof(Type) * (n - 1));

		delete[] val[n - 1];
		memcpy(tmp + (n - 1), val + (n), sizeof(Type) * (sz - (n - 1)));
		
		delete[] val;
		val = tmp;
		sz--;
 	}
	size_t size()
	{
		return sz;
	}
protected:
	Type* val;
	size_t sz;
};
struct param
{
	int tablen;
	int strln;
};

void process(myvec<char*> text, param p, myvec<char*> &ntext)
{
	for (size_t i = 0; i < text.size() - 1; i++)
	{
		if (strrchr(text[i], '-'))
		{
			size_t sz = strlen(text[i]) + strlen(text[i + 1]) - 1;
			char* n = new char[sz];
			memcpy(n, text[i], strlen(text[i]) - 1);
			memcpy(n + strlen(text[i]) - 1, text[i + 1], strlen(text[i + 1]));
			text.erase(i + 1);
			text[i] = n;
			text[i][sz] = 0;
			i--;
		}
	}

	size_t itr = 0;

	for (size_t i = 0; i < p.tablen; i++)
		text.push_front(" ");

	while(itr < text.size())
	{
		int jtr = p.strln;
		
		ntext.push_back(new char[128]);
		ntext[ntext.size() - 1][0] = 0;

		while(jtr >= strlen(text[itr]) || ( jtr == p.strln && p.strln < strlen(text[itr]) ) )
		{
			strcat(ntext[ntext.size() - 1], text[itr]);
			
			if (!isspace(*text[itr]))
				strcat(ntext[ntext.size() - 1], " ");
			
			jtr -= strlen(text[itr++]);

			if (jtr <= 0)
				break;

			if (itr == text.size())
				return;
		}

	}
}

int main()
{
	std::ifstream fin("in.txt", std::ios::in);
	std::ofstream fout("out.txt", std::ios::out);

	myvec<char*> strings;
	strings.push_back(new char[512]);

	int i = 0;
	while(fin >> strings[i])
	{
		i++;
		strings.push_back(new char[512]);
	}

	param p;
	std::cout << "Please, enter tab and string length : ";
	std::cin >> p.tablen >> p.strln;
	myvec<char*> ns;
	process(strings, p, ns);

	for (size_t i = 0; i < ns.size(); i++)
		fout << ns[i] << "\n";

	return 0;
}
mazzahaker вне форума Ответить с цитированием
Старый 28.03.2012, 18:13   #2
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Я в С++ не разбираюсь (знаю пока только С), если что поправьте меня, но мне кажется, что ошибка в коде:
Код:
#include "fstream"
#include "iostream"
#include "vector"
Нужно писать:
Код:
#include <fstream>
#include <iostream>
#include <vector>
rmv240899 вне форума Ответить с цитированием
Старый 28.03.2012, 20:44   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rmv240899 Посмотреть сообщение
Я в С++ не разбираюсь (знаю пока только С), если что поправьте меня, но мне кажется, что ошибка в коде:
Код:
#include "fstream"
#include "iostream"
#include "vector"
Нужно писать:
Код:
#include <fstream>
#include <iostream>
#include <vector>
Ошибаетесь. Не вполне корректно, но не критично. Не является ошибкой.
_Bers вне форума Ответить с цитированием
Старый 29.03.2012, 10:54   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Цитата:
но она не совсем верно работает
"не совсем верно" - это как? Опишите проблему.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Обработка строк xNеo Помощь студентам 13 03.01.2012 16:26
Обработка Строк katya_bush Паскаль, Turbo Pascal, PascalABC.NET 4 14.11.2011 21:50
Обработка строк Malyshka Microsoft Office Excel 10 26.12.2010 23:57
Обработка строк Тигран001 Помощь студентам 2 24.04.2010 10:32
Обработка строк Александр90 Помощь студентам 1 16.12.2009 21:21