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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу тупики http://www.cyberforum.ru/cpp-beginners/thread19030.html
Здравствуйте)Помогите пожалуйста написать программу,с помощью которой можно ликвидировать взаимоблокировки выведением системы после тупика. Спасибо заранее:) Добавлено через 14 часов 16 минут 25...
C++ Довольно Трудная задача(Двумерные массивы) Вот попалась такая задача: Найти седловую точку целочисленной матрицы с числом строк не более 12, числом столбцов не более 20. Найти произведение ненулевых элементов столбца, в котором... http://www.cyberforum.ru/cpp-beginners/thread19026.html
Borland C 3.14 Работа в графическом режиме!!! C++
Меня интересует каким образом можно вводить/выводить информацию в графическом режиме. Существут ли аналоги функций printf(),scanf();getch() ?:wall:
C++ Удаление всех строк содержащих минимальный элемент матрицы.
Задание: Составить программу обработки матрицы. Удаление всех строк содержащих минимальный элемент матрицы. #include <stdio.h> void Min(int** m, int n) { int j=0, i=0, y, k, MiEl=m; ...
C++ Написать программу, которая подводит итоги конкурса "5 лучших товаров года". http://www.cyberforum.ru/cpp-beginners/thread18973.html
Здравствуйте, помогите пожалуйста решить задачу. Написать программу, которая подводит итоги конкурса "5 лучших товаров года". Оценка товара производится по пятибалльной системе. Программа должна...
C++ переведите пожалуйста с языка паскаль на си++! вот код: program cyb_38; uses Crt; var n, i, unik, srst: byte; sum: longint; sr_ar: real; mas: array of integer; begin подробнее

Показать сообщение отдельно
neon-st
2 / 2 / 0
Регистрация: 20.12.2008
Сообщений: 11

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

21.12.2008, 14:23. Просмотров 1221. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru