Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
neon-st
2 / 2 / 0
Регистрация: 20.12.2008
Сообщений: 11
#1

ООП (работа со строкой) нужно немного переделать код - C++

21.12.2008, 14:23. Просмотров 1239. Ответов 0
Метки нет (Все метки)

Вообщем мне очень нужно сделать задание(это часть курсового проекта).Нужно написать программу проверки введенного текста.
Условие задания:
В программе необходимо реализовать принципы объектно ориентированного программирования.Введенный пользователем текст,должен соответствовать следующим правилам:
-первая буква в слове любая.
-если первая буква в слове-гласная,то в слове должно быть хотябы две цифры,если специальные согласные(к которым относица R,T,F)-то одна цифра,в противном случае использование цифр запрещено.
-специальные согласные используются в два раза реже остальных согласных.
-гласные используются в два раза чаще любых согласных
-слова разделяются только пробелами.
-минимальная длина слова 5 букв.

У меня есть задание похожее на мое,но только я не могу переделать его,тем более разобраться полностью в этом(((.

Подобное задание,с другими правилами,которое нужно переделать.
Код
#include<iostream.h>
#include <windows.h>
#include<stdio.h>
#include <string.h>
#define SP_GLAS		"AIai"							//специальные гласные



char bufrus[256];

		
char*rus(const char*text)   //функция вывода на экран русских символов
{
	CharToOem(text, bufrus);
	return bufrus;
}

class Base		//базовый класс Base
{
protected:

	char str[1000];     //массив хранения слова
	bool error;         //переменная ошибки
	
	
public:
	void Enter(char* );	//ввод слова				
	void Str_Len(void);	
	void Latin(void);				
	void Posl_Bukva(void);		
	void Error(void);			
	virtual void Proverka(void)=0;	
};

void Base::Enter(char *a)	//ввод слова
{
	strcpy(str,a);
	error=true;
}

void Base::Str_Len(void)	    //проверка длинны слова
{
	int kol_bukv=0;
	for(int i=0; str[i]!='\0'; i++)
	{
		if (isalpha(str[i]))           //проверка  на наличие букв
		{
			kol_bukv++;
		}
	}
	if(kol_bukv<3)
	{	
		cout<<rus("Ошибка: Минимальная длина слова 3 буквы.")<<endl;
		error=false;
		exit(1);
	}
}

void Base::Latin(void)			//проверка слова на наличие нелатинских символов алфавита
{
	for(int i=0;i<(strlen(str));i++)
		if (str[i] < 0)
		{
			cout<<rus("Ошибка: Слова должны состоять только из Латинских символов.")<<endl;
			error=false;
			exit(1);
		}
 }

void Base::Posl_Bukva(void)	//проверка правила использования специальных гласных
{
	for(int i=0; str[i]!='\0'; i++)
		if ((strchr(SP_GLAS,str[i])) && str[i+1]!='\0')        //встречается ли символ в строке и последний ли он
		{
			cout<<rus("Ошибка: Специальные гласные могут быть только последними в слове.")<<endl;
			error=false;
			exit(1);
		}
}

void Base::Error(void)			//проверка ошибок
{
	if(error == true)
		cout<<rus("В данном слове ошибок нет.")<<endl; 
	
}

class Glasnye:public Base		//производный класс Glasnye
{
public:
	void Proverka()
	{
		int i;
		for(i=0; str[i]!='\0'; i++)
			if (isdigit(str[i]))      // использование цифр запрешено
			{
				cout<<rus("Ошибка: Если последняя буква в слове специальная гласная, то слово не должно содержать цифр.")<<endl;
				error=false;
				break;
			}
			
	}
};

class Otnosh:public Base		//производный класс Otnosh
{
public:
	void Proverka(void)
	{
		int bukva=0;
        int tsifra=0;
        for(int i=0;i<strlen(str);i++)
		{
			if (isalpha(str[i]))       //        буквы
				{
					bukva++;
				}
            if (isdigit(str[i]))    //цифры
				{
					tsifra++;
				}
        }
        if(bukva!=(tsifra*3))
		{
			cout<<rus("Ошибка: Если последняя буква в слове - не специальная гласная, букв в слове должно быть в 3 раза больше, чем цифр.")<<endl;
			error=false;
		}
	}
};

void main()
{
	cout<<rus("-------------------------------Сущствуют правила:------------------------------")<<endl;
	cout<<rus(" * Существуют специальные гласные: A,I.")<<endl;
	cout<<rus(" * Если в слове последняя гласная - специальная, то использование цифр в слове");
	cout<<rus("   запрещено, в противном случае букв в слове должно быть в три раза больше чем цифр.")<<endl;
	cout<<rus(" * Минимальная длина слова - 3 буквы, причем цифры не учитываются.")<<endl;
	cout<<rus(" * Разделяются слова только запятыми.")<<endl;
	cout<<rus(" * Если длина слова больше 7 букв, в конце предложения ставится точка,")<<endl;
	cout<<rus("   в противном случае - восклицательный знак.")<<endl;
	cout<<endl;
	cout<<rus("---------------Введите строку, удовлетворяющую данным правилам:-----------------")<<endl;

	Base *b;         //указатель на базовый класс
	Glasnye g;        // обьект производного класса 
	Otnosh o;          // обьект производного класса 
	char str[1000];      // вся строка
    char *st;             

	bool len_of_Base=true;   //длина слова
	char last_simbol ;         //последний символ
	

	gets(str);
    cout<<rus("\n\t\t\t\tАнализ текста:")<<endl;
	
	if(strlen(str)==0)
	{
		cout<<rus("Введена пустая строка. ")<<endl;
		exit(1);
	}
	else
	{
	   if(strchr(str,' '))                  //встречается ли пробел
       {
	        cout<<rus("Ошибка: Слова должны разделяться только запятыми.")<<endl;
		}
		if (str[strlen(str)-1]=='!' || str[strlen(str)-1]=='.')
		{
			last_simbol=str[strlen(str)-1];
			str[strlen(str)-1]='\0';
		}
		st = strtok(str,", ");
		for (int i=1;st!='\0';i++)
		{
			if (strlen(st)>7)
				len_of_Base=false;
			
			if (strchr(SP_GLAS,st[strlen(st)-1]))
				b=&g;
			else
				b=&o;
			b->Enter(st);
			b->Latin();
			b->Posl_Bukva();
			b->Str_Len();
			b->Proverka();
			b->Error();
			st=strtok(NULL,", ");
		}
	}
	if ((!len_of_Base) && (last_simbol!='.'))
	{
		cout<<rus("Ошибка: Так как в предложении есть слово больше семи букв, то в конце предложения должна стоять точка.")<<endl;
	
	}
	else 
		if ((len_of_Base) && (last_simbol!='!'))
	{
	 	cout<<rus("Ошибка: Так как в предложении нет слова больше семи букв, то в конце предложения должен стоять восклицательный знак.")<<endl;
		
	}
}
Помогите пожалуйста,срочно нужно.В понедельник 22декабря сдавать надо(((.Обычно я в С++ всегда сам разбираюсь,но сейчас времени нету,очень много надо учить(((...

Добавлено через 23 часа 34 минуты 5 секунд
Ну мне может кто нибудь помочь?пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2008, 14:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ООП (работа со строкой) нужно немного переделать код (C++):

Работа с структурой в С++ (код есть, нужно немного доработать) - C++
Приветствую. Есть задание: Создать структуру STUDENT, которая имеет поля: 1. NAME. ФИО. 2. GROUP - номер группы. 3. SES -...

Немного переделать код - C++
Написать функцию замены всех русских символов в строке пробелами. Ввести и обработать две смешанные строки. #include&lt;iostream&gt; ...

Динамические переменные (нужно немного переделать) - C++
Нужно немного переделать здесь нужно найти для каждой строки количество элементов, кратные трем, и крупнейший из полученных результатов и...

меню функции нужно немного переделать - C++
следующая проблема... я сделал меню но у меня переменные не связаны между функциями где у меня ошибки? как можно исправить ...

Переделать код в ООП - C++
Помогите переделать код в ООП #include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include&lt;iostream&gt; #include &lt;conio.h&gt; #include...

Нужно немного переделать программу: использовать функции и динамическое выделение памяти - C++
Помогите переделать программу в соответствии с условиями: а) для хранения массивов используйте динамически распределяемую память; б)...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2008, 14:23
Привет! Вот еще темы с ответами:

Нужно немного переделать программу нахождения компонент сильной связности в графе - C++
В общем задание такое, нужно переделать эту программу, я не знаю как это сделать, помогите люди добрые)) #include &lt;iostream&gt; ...

Нужно немного доработать код - C++
#include &lt;iostream&gt; using namespace std; int main() { int n ; cin &gt;&gt; n; int M = (n-1) + (n-2); ...

Нужно немного исправить код - C++
{ifstream in(&quot;1.txt&quot;); in &gt;&gt; n &gt;&gt; m; a = new int*; for (int i = 0; i &lt; n; ++i) { a = new int; for (int j = 0; j &lt; m; ++j) in...

Код написан в Dev C. Не работает в Visual. Как нужно переделать код? - C++
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.