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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2008, 20:23   #1
darkie
 
Регистрация: 27.11.2008
Сообщений: 5
Восклицание Программа обработки текста, С++.

мучаюсь с этим, всё никак не могу понять. делала с использованием вектора. но препод ругается, т.к. по курсу ещё не проходили. суть не в этом...

вот задание:

Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING:
а) написать программу ввода такого текста с клавиатуры;
б) каждую букву, стоящую в алфавите на месте K, заменить на букву, стоящую в алфавите на месте K с конца алфавита.

нужно сделать динамический массив, в который будем записывать введенные символы с помощью функции gets, затем полученный массив записать в файл, запись осуществить, учитывая, что последний символ ‘.’. В дальнейшем работать с файлом. так же нужно сделать так, чтобы программа читала лишь маленькие латинские буквы, а при вводе других символов выдавала ошибку.
darkie вне форума Ответить с цитированием
Старый 27.11.2008, 21:24   #2
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

ша напишу ввод..
ams007 вне форума Ответить с цитированием
Старый 27.11.2008, 22:36   #3
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Сорри что так долго. Собаке надо было погулять))
Может все таки через getch или kbhit ? Написал через getch.
Код:
#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>

#define true 1
#define false 0


// ф-я проверяет входной алфавит
int
IsCorectSymbol(char key)
{
	if( (key >= 'a' && key <= 'z') || key == ' ' || key == '.')
		return true;
	return false;
}

// ф-я делает БИИИП)
void
BeepError()
{
	sound(300);
	delay(100);
	nosound();
}

// ф-я меняет и выводит символ на экран.
void
PrintAndReplaceSymbol(char *key)
{
	if(*key == 'k')
		*key = 'z' - ('k'-'a');
	printf("%c",*key);
}


void
main()
{
	char	*str;
	char	key;
	int	i;
	int 	TotalLength;
	key = 0;
	i = 0;

	clrscr();

	
	//выделим память на один char
	str = (char*)malloc(sizeof(char));
	if( NULL == str)
	{
		printf("Memory error");
		return;
	}

	while(1)
	{
		// читаем код символа
		key = getch();
		// если символ не наш...
		if( false == IsCorectSymbol(key) )
		{
			// .. то делаем БИИП и ждем идем на ввод след. символа
			BeepError();
			continue;
		}

		// печатаем уже нужный символ
		PrintAndReplaceSymbol(&key);

		// сохр. его в массив
		str[i++]=key;
		// довыделим память под след. символ
		str = (char*)realloc( str, (i + 1) * sizeof(char) );
		if( NULL == str)
		{
			printf("Memory error");
			return;
		}
		// если введена точка...
		if( '.' == key )
		{
			// ставим символ завершения строки
			str[i] = 0;
			printf("\n\n\nPoint hit. Quit.\n");
			//выходим из цикла
			break;
		}


	}

	//тут я сделал печать - ты делай что надо..
        printf("%s",str);
	TotalLength = i;

	//память почистим
	free(str);
	getch();
}
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 01:05   #4
StudentPolitech
Форумчанин
 
Аватар для StudentPolitech
 
Регистрация: 21.11.2008
Сообщений: 400
По умолчанию

аms007 чё то длиноватый кодик у тебя, было у меня наподобие задание только с числами найти в массиве такое то число заменить его на такое - то и в конце концов вывести его на экран. Я задавал просто если массив mas[i]=K то оно будет равно такой то букве Всё!!! больше ничего не надо, код умещается буквально в пару строчек, darkie если найду исходник может напишу, а так у самого зада ч задано выше крышы
Винда, KIS 2010, книжка по С/С++, остальное неважно........
StudentPolitech вне форума Ответить с цитированием
Старый 28.11.2008, 01:39   #5
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

StudentPolitech, а я и не претендовал на элегантность решения, так, накидал за 5 мин на коленке, и поразмашистей, чтоб понятно было. Если бы я еще и дуумал, когда это накидал, то - не спорю, можно гораздо короче написАть.
Да, кстати заменить элемент один на другой сдесь вот как раз совсем чуть-чуть:

Код:
while(1)
{

   if(*key == 'k')
	*key = 'z' - ('k'-'a');
}

Последний раз редактировалось ams007; 28.11.2008 в 01:42.
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 09:40   #6
darkie
 
Регистрация: 27.11.2008
Сообщений: 5
По умолчанию

огромное спасибо за помощь. но есть трудность... программирую в microsoft visual studio 2005. и после компиляции ругается на sound, nosound, delay, clrscr... пишет, что identifier not found. а можно сделать без бииииипа?))) типа просто, чтоб текстом выводилось "ошибка"? и нужно заменить не только букву K. а все буквы так надо, т.е. симметрично как бы. a на z, b на y...
darkie вне форума Ответить с цитированием
Старый 28.11.2008, 10:43   #7
darkie
 
Регистрация: 27.11.2008
Сообщений: 5
По умолчанию

и не могли бы вы скрин выложить, как у вас это работает?) просто у меня вообще пока никак... вообще по словам препода, это должно быть так:
вводим предложение с точкой.
жмём enter.
прога проверяет только ли это латиница. если нет, то выдаёт ошибку.
если всё ок, то спрашивает, точно ли эту строчку я хочу обрабатывать дальше.
после этого выводит текст обработанный (симметрично заменяет буквы a-z, b-y, c-x и т.д.)
вот так это должно выглядеть... знаю, что эт оч замороченно. но увы мои познания я не успеваю обогатить на достаточный уровень за короткое время. сдать нужно в пн... оч жду от вас помощи...

Последний раз редактировалось darkie; 28.11.2008 в 11:15.
darkie вне форума Ответить с цитированием
Старый 28.11.2008, 19:59   #8
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Я тебе на Борланд С написал, под вижуал так

Код:
//Это тебе наверно надо - попробуй
//#include "stdafx.h"

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


// ф-я проверяет входной алфавит
bool
IsCorectSymbol(char key)
{
	if( (key >= 'a' && key <= 'z') || key == ' ' || key == '.')
		return true;
	return false;
}

// ф-я меняет и выводит символ на экран.
void
PrintAndReplaceSymbol(char *key)
{
	if(*key != ' ' && *key != '.')
		*key = 'z' - ( *key -'a');
	printf("%c",*key);
}


void
main()
{
	char	*str;
	char	key;
	int	i;
	int 	TotalLength;
	key = 0;
	i = 0;

	//выделим память на один char
	str = (char*)malloc(sizeof(char));
	if( NULL == str)
	{
		printf("Memory error");
		return;
	}

	while(1)
	{
		// читаем код символа
		key = getch();
		// если символ не наш...
		if( false == IsCorectSymbol(key) )
		{
			// .. то делаем БИИП и ждем идем на ввод след. символа
			Beep(
				500,	// частота
				300);	// время звучания в миллисекундах
			continue;
		}

		// печатаем уже нужный символ
		PrintAndReplaceSymbol(&key);

		// сохр. его в массив
		str[i++]=key;
		// довыделим память под след. символ
		str = (char*)realloc( str, (i + 1) * sizeof(char) );
		if( NULL == str)
		{
			printf("Memory error");
			return;
		}
		// если введена точка...
		if( '.' == key )
		{
			// ставим символ завершения строки
			str[i] = 0;
			printf("\n\n\nPoint hit. Quit.\n");
			//выходим из цикла
			break;
		}


	}

	//тут я сделал печать - ты делай что надо..
        printf("%s",str);
	TotalLength = i;

	//память почистим
	free(str);
	getch();
}
не проверял(вижуал дома не держу), но должно работать.
Удачи!
ams007 вне форума Ответить с цитированием
Старый 28.11.2008, 20:12   #9
ams007
Пользователь
 
Регистрация: 19.11.2008
Сообщений: 35
По умолчанию

Или так. по докам realloc нельзя использовать с нулевым указателем в параметре, но на борланде такое выделение памяти работает нормально, так что проблем быть не должно. А код - короче)

Код:
//Это тебе наверно надо - попробуй
//#include "stdafx.h"

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


// ф-я проверяет входной алфавит и меняет нужные символы
bool
IsCorectWithReplaceSymbol(char *key)
{
	if( (*key >= 'a' && *key <= 'z') || *key == ' ' || *key == '.')
	{
		if(*key != ' ' && *key != '.')
			*key = 'z' - ( *key -'a');

		return true;
	}
	return false;
}

void
main()
{
	char	*str;
	char	key;
	int	i;
	int 	TotalLength;

	key = 0;
	i = 0;
	str = NULL;

	while(1)
	{
		// читаем код символа
		key = getch();
		// если символ не наш...
		if( false == IsCorectWithReplaceSymbol( &key) )
		{
			// .. то делаем БИИП и ждем идем на ввод след. символа
			Beep(
				500,	// частота
				300);	// время звучания в миллисекундах
			continue;
		}
		
		// выделим память под текущий символ
		str = (char*)realloc( str, (i + 1) * sizeof(char) );
		if( NULL == str)
		{
			printf("Memory error");
			return;
		}

		// печатаем уже нужный символ
		printf("%c",key);

		// сохр. его в массив
		str[i++]=key;
		
		// если введена точка...
		if( '.' == key )
		{
			// ставим символ завершения строки
			str[i] = 0;
			printf("\n\n\nPoint hit. Quit.\n");
			//выходим из цикла
			break;
		}


	}

	//тут я сделал печать - ты делай что надо..
        printf("%s",str);
	TotalLength = i;

	//память почистим
	free(str);
	getch();
}
ams007 вне форума Ответить с цитированием
Старый 30.11.2008, 12:25   #10
darkie
 
Регистрация: 27.11.2008
Сообщений: 5
По умолчанию

знаете, что странно: компилирую, запускаю... ввожу текст. т.е. хочу ввести текст обычный. а он сразу вводится "перевёрнутым". хм... это неправильно.
мне нужно, чтобы было так, как я описала раньше. пожалуйста)
darkie вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа поиска и замены+копирования текста 666dvg999 Общие вопросы C/C++ 4 05.10.2008 20:01
Программирование операций обработки файлов Дима82 Фриланс 1 19.05.2008 13:57
PUZZLEWORD. Программа или скрипт для генерации текста. avelin375 Фриланс 1 15.05.2008 10:44
Команды обработки строк! Proskurin Помощь студентам 11 06.05.2008 16:11
Программирование процедур в задачах обработки текста Numi_Pumi Помощь студентам 5 20.12.2007 17:04