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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу тупики http://www.cyberforum.ru/cpp-beginners/thread19030.html
Здравствуйте)Помогите пожалуйста написать программу,с помощью которой можно ликвидировать взаимоблокировки выведением системы после тупика. Спасибо заранее:) Добавлено через 14 часов 16 минут 25 секунд Здравствуйте.Очень срочно нужна программа на любом языке.Программа должна ликвидировать взаимоблокировки восстановлением системы после тупика.То есть,когда процессы взаимоблокируются из-за...
C++ Довольно Трудная задача(Двумерные массивы) Вот попалась такая задача: Найти седловую точку целочисленной матрицы с числом строк не более 12, числом столбцов не более 20. Найти произведение ненулевых элементов столбца, в котором окажется седловая точка. Формат числа ц. Затрудняюсь решить, помогите пожалуйста. P.S. Седловая точка-минимальный элемент в строке, но при этом максимальный в столбце. Седловых точек может быть... 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; // int min;
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. Просмотров 1213. Ответов 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 секунд
Ну мне может кто нибудь помочь?пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru