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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2016, 16:29   #1
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию Строки

Задача:
Цитата:
Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать все слова последовательности, предварительно преобразовав каждое из них по следующему правилу:
1) перенести последнюю букву в начало слова;
2) удалить из слова первую букву.

Примечание: Все операции над строками выполняются отдельными функциями в том порядке, в котором они описаны в задании. Кроме того, в случае необходимости, должна быть реализована проверка на целостность кучи (см. приложение 2). Основы работы со строками в Си описаны в приложении 4.
Код:
Код:
#include <iostream>
#include <string>
using namespace std;

int main(){
	char string[256];
	char *word1 = new char[];
	char *word2 = new char[];
	char *word3 = new char[];
	char *word4 = new char[];
	char *word5 = new char[];
	char *buf;
	char *p;
	char buf1;
	int mark;
	int nword;
	char *check;
	int max;
	char out1[] = "\0\0\0\0\0";
	char out2[] = "\0\0\0\0\0";
	char out3[] = "\0\0\0\0\0";
	char out4[] = "\0\0\0\0\0";
	char out5[] = "\0\0\0\0\0";

	setlocale(LC_ALL, "Russian");
	cout << "Строки" << endl << "Автор: студент гр. РИ-150005 Рогожников Роман Сергеевич" << endl << "Екатеринбург, 2016 г." << endl;
	for (int i = 0; i < 100; i++)
		string[i] = '\0';
	
	cout << "Введите вашу строку и нажмите клавишу Enter: " << endl;
	cin >> string;

	check = strchr(string, '.');

	if (check == 0)
	{
		cout << "Нет точки! При нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	p = string;
	mark = 0;
	nword = 0;

	while (*p != '.')
	{
		if (*p == ' ' && mark != 1)
		{
			nword++;
			mark = 1;
		}
		*p++;
		if (*p != ' ')
			mark = 0;
		if (*p == '.')
			nword++;
	}

	cout << "Слов: " << nword << endl;

	if (nword == 0)
	{
		cout <<"Ошибка! Вы написали только точку! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	if (nword > 5)
	{
		cout <<"Ошибка! Вы написали более 5 слов! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	buf = strtok(string, " .");
	if (buf == NULL || strlen(buf) > 5)
	{
		cout << "Ошибка! Больше 5 букв в 1 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}
	else memcpy(word1, buf, 6);
		
	if (nword >= 2)
	{
		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 2 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word2, buf, 6);
	}

	if (nword >= 3)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 3 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word3, buf, 6);
	}

	if (nword >= 4)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 4 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word4, buf, 6);
	}

	if (nword == 5)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 5 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word5, buf, 6);
	}

	if (nword >= 1)
	{
		buf1 = out1[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out1[0] = out1[max];
		}
		out1[max] = buf1;
		cout << "Первое измененное слово: " << out1 << endl;
	}

	if (nword >= 2)
	{
		buf1 = out2[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out2[0] = out2[max];
		}
		out2[max] = buf1;
		cout << "Второе измененное слово: " << out2 << endl;
	}
	if (nword >= 3)
	{
		buf1 = out3[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out3[0] = out3[max];
		}
		out3[max] = buf1;
		cout << "Третье измененное слово: " << out3 << endl;
	}
	if (nword >= 4)
	{
		buf1 = out4[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out4[0] = out4[max];
		}
		out4[max] = buf1;
		cout << "Четвертое измененное слово: " << out4 << endl;
	}
	if (nword >= 5)
	{
		buf1 = out5[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out5[0] = out5[max];
		}
		out5[max] = buf1;
		cout << "Пятое измененное слово: " << out5 << endl;
	}

	free(word1);
	free(word2);
	free(word3);
	free(word4);
	free(word5);
	
	system("pause");
	return 0;
}
Чувствую, здесь много ошибок, надеюсь на вашу помощь.) (ко второму заданию пока не приступал)
Narsky вне форума Ответить с цитированием
Старый 29.06.2016, 16:51   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Код:
new char[];
сколько памяти выделили?

Код:
free(word1);
Какой фрии, если был нью?
p51x вне форума Ответить с цитированием
Старый 29.06.2016, 16:57   #3
Narsky
Форумчанин
 
Регистрация: 21.06.2016
Сообщений: 109
По умолчанию

Исправил, пять хватит?
Код:
#include <iostream>
#include <string>
using namespace std;

int main(){
	char string[256];
	char *word1 = new char[5];
	char *word2 = new char[5];
	char *word3 = new char[5];
	char *word4 = new char[5];
	char *word5 = new char[5];
	char *buf;
	char *p;
	char buf1;
	int mark;
	int nword;
	char *check;
	int max;
	char out1[] = "\0\0\0\0\0";
	char out2[] = "\0\0\0\0\0";
	char out3[] = "\0\0\0\0\0";
	char out4[] = "\0\0\0\0\0";
	char out5[] = "\0\0\0\0\0";

	setlocale(LC_ALL, "Russian");
	cout << "Строки" << endl << "Автор: студент гр. РИ-150005 Рогожников Роман Сергеевич" << endl << "Екатеринбург, 2016 г." << endl;
	for (int i = 0; i < 100; i++)
		string[i] = '\0';
	
	cout << "Введите вашу строку и нажмите клавишу Enter: " << endl;
	cin >> string;

	check = strchr(string, '.');

	if (check == 0)
	{
		cout << "Нет точки! При нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	p = string;
	mark = 0;
	nword = 0;

	while (*p != '.')
	{
		if (*p == ' ' && mark != 1)
		{
			nword++;
			mark = 1;
		}
		*p++;
		if (*p != ' ')
			mark = 0;
		if (*p == '.')
			nword++;
	}

	cout << "Слов: " << nword << endl;

	if (nword == 0)
	{
		cout <<"Ошибка! Вы написали только точку! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	if (nword > 5)
	{
		cout <<"Ошибка! Вы написали более 5 слов! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}

	buf = strtok(string, " .");
	if (buf == NULL || strlen(buf) > 5)
	{
		cout << "Ошибка! Больше 5 букв в 1 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
		system("pause");
		return 1;
	}
	else memcpy(word1, buf, 6);
		
	if (nword >= 2)
	{
		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 2 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word2, buf, 6);
	}

	if (nword >= 3)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 3 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word3, buf, 6);
	}

	if (nword >= 4)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 4 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word4, buf, 6);
	}

	if (nword == 5)
	{

		buf = strtok(NULL, " .");
		if (buf == NULL || strlen(buf) > 5)
		{
			cout << "Ошибка! Больше 5 букв в 5 слове! \nПри нажатии любой клавиши программа завершится!" << endl;
			system("pause");
			return 1;
		}
		else memcpy(word5, buf, 6);
	}

	if (nword >= 1)
	{
		buf1 = out1[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out1[0] = out1[max];
		}
		out1[max] = buf1;
		cout << "Первое измененное слово: " << out1 << endl;
	}

	if (nword >= 2)
	{
		buf1 = out2[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out2[0] = out2[max];
		}
		out2[max] = buf1;
		cout << "Второе измененное слово: " << out2 << endl;
	}
	if (nword >= 3)
	{
		buf1 = out3[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out3[0] = out3[max];
		}
		out3[max] = buf1;
		cout << "Третье измененное слово: " << out3 << endl;
	}
	if (nword >= 4)
	{
		buf1 = out4[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out4[0] = out4[max];
		}
		out4[max] = buf1;
		cout << "Четвертое измененное слово: " << out4 << endl;
	}
	if (nword >= 5)
	{
		buf1 = out5[0];
		for (int i = 0; i < 5; i++)
		{
			max = i;
			out5[0] = out5[max];
		}
		out5[max] = buf1;
		cout << "Пятое измененное слово: " << out5 << endl;
	}

	delete(word1);
	delete(word2);
	delete(word3);
	delete(word4);
	delete(word5);
	
	system("pause");
	return 0;
}
Narsky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводить только измененные строки. Перед каждой строкой записывать номер строки в исходном тексте.используя строки и текст.файл nero4ka C++ Builder 1 13.06.2015 07:14
Необходимо каждый элемент строки разделить на сумму элементов строки IgoreKMaN Общие вопросы C/C++ 4 18.12.2014 01:28
Задача на строки. Даны две строки. Определить можно ли из символов первой строки получить вторую строку.( написать подпрограммой и ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 5 09.02.2013 14:07
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10