search

Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой CMD

Если вы полностью уверены что не можете осилить эту задачу, советую вам просмотреть код и полностью в нем разобраться! Протестировать все в отладчике!

Коммуникация с веб-сайтами WWW использует протокол HTTP. В упрощенном виде это выполняется так: - строка символов отправляется на данный сервер (HTTP-сервер); - сервер в ответ генерирует строку, которая обрабатывается на клиенте. Задача работы - реализовать упрощенный серверный протокол HTTP. Для этого необходимо реализовать функцию, которая получает строку символов и возвращает структурированные данные. Упрощенный протокол обрабатывает данные о пользователя в следующем виде: GET \name=”<user name>” \email=”<box name>@<post-server name>” \id<user_id> END Предполагается, что строки разделяются символами новой строки ('\n'), но параметры не содержат этого знака, т.е. нераздельны. После END нет нового знака строки. По результатам обработки выдавать сообщение по результату обработки: 200 – сообщение успешно обработано, все параметры присутствуют; 400 – неполные данные, т.е. есть заголовок “GET\n … END”, но один из параметров не задан, задан с ошибкой и т.д. 500 – неправильный адрес почтового ящика пользователя. Адрес почты должен содержать знак «@», в качестве допустимых почтовых серверов выступают gmail.com, yahoo.com и ukr.net; 600 – идентификатор пользователя содержит не цифры. Обработанные данные представить в виде структуры response, поля которой определить самостоятельно. Для заполнения полей значениями и вывода значений полей на экран разработать функции.

#include <iostream>
#include <string>
#include <stdio.h>
#include <windows.h>
using namespace std;
#define Stop_Console_Windows system("pause >> void"); 

struct response {

public: 
	string USER; 
	string Response_Check_Parametr_Main(string User_Parametr_Main) {
		if (User_Parametr_Main == this->Options)
			return "200";
		else
			return "400";
	}
	string Response_Check_Parametr_Id(string User_Parametr_Id) {
		
		if (User_Parametr_Id.find_first_not_of("0123456789") != string::npos || User_Parametr_Id[0] == '\0')
			return "600";
		else
			return "";
	}
	string Response_Check_Parametr_Email(string User_Parametr_Email , string User_Parametr_Main) {
		const string gmail = "gmail.com", yahoo = "yahoo.com", ukr = "ukr.net";  // const options error 500
		if (User_Parametr_Email != gmail && User_Parametr_Email != yahoo && User_Parametr_Email != ukr)
			return "500"; 
		if (User_Parametr_Main.find('@') == string::npos) // Check "@"
			return "500";
		else
		return ""; 
	}
private:
	string Options = { "GET\\n\\name<>\\n\\email<>@<>\\n\\id=<>\\nEND" };
};

void main(){
	setlocale(LC_ALL, "RUS");
	response s;
	response s_http; 
	char begin = 0; 
	for (;;) {
		int count = 0, pos = -1, Tmp_Count = 48; // 48 = count ID options
		string tmp1, tmp2, Options_HTTP;
		bool check = true;
		cout << "Begin program enter 1" << endl;
		cin >> begin;
		if (begin != '1')
			break;
		cin.ignore();
//-------------------------------------------------------------------------------------------------------------------------------
	cout << "200 = the message was successfully processed, all parameters are present;" << endl; 
	cout << "400 = incomplete data, i.e. there is a header “GET \ n ... END”, but one of the parameters is not specified,\n"
		<< "set with an error, etc." << endl; 
	cout << "500 = Is an invalid user mailbox address. The email address must contain\n"
		<< "the “@” sign, gmail.com, yahoo.com and ukr.net;" << endl;
	cout << "Request example" << endl; 
	cout << "GET\\n\\name=<user name>\\n\\email<box name>@<post-server name>\\n\\id<user_id>\\nEND" << endl;
	cout << "Successful example" << endl; 
	cout << "GET\\n\\name<Igor>\\n\\email=<Igor_Dombrovsky>@<gmail.com>\\n\\id=<00116611>\\nEND" << endl; 
	cout << "http ==>> Enter line:" << endl; 
//------------------------------------------------------------------------------------------------------------------------------- 
		getline(cin, s.USER);
		if (s.USER.find("GET\\n\\name=<user name>\\n\\email=<box name>@<post-server name>\\n\\id=<user_id>\\nEND") != -1)
			cout << "You have not entered data in the parameters" << endl;
//-------------------------------------------------------------------------------------------------------------------------------
		while (check) { // 1 ? 0
			pos = s.USER.find('<'); // cordinates options 
			if (pos != string::npos)pos += 1;
			for (int i = pos; i < s.USER.size(); i++) {
				if (s.USER[i] == '>')
					break;
				tmp1 += s.USER[i];
				count++;
				if (s.USER[i] == '\0') // terminator line
					break;
			}
			if (pos + count < s.USER.size()) // check memory
				tmp2 = s.USER.erase(pos, count);
			Tmp_Count++;
			tmp1 += Tmp_Count; // N opions 
			Options_HTTP += s.USER.substr(0, pos + 1); // Options_HTTP = storage options
			s.USER = s.USER.erase(0, pos + 1);
			if (pos + count < s.USER.size()) { // check memory
				count = 0; pos = -1;
			}
			else
				check = false; // while false
		}
		Options_HTTP += s.USER; // Options_HTTP = storage options
//-------------------------------------------------------------------------------------------------------------------------------
		// Pick the necessary parameters
		pos = tmp1.find('2');
		if (pos != string::npos)
			tmp1 = tmp1.erase(0, pos + 1);
		tmp2 = tmp1;
		pos = tmp1.find('3');
		if (pos != string::npos)
			tmp1 = tmp1.erase(0, pos + 1);
		tmp1 = tmp1.substr(0, tmp1.length() - 1);
		pos = tmp2.find('3');
		if (pos != string::npos)
			tmp2 = tmp2.substr(0, pos);
//-------------------------------------------------------------------------------------------------------------------------------
		cout << s_http.Response_Check_Parametr_Main(Options_HTTP) << endl; 
		cout << s_http.Response_Check_Parametr_Email(tmp2 , Options_HTTP) << endl; 
		cout << s_http.Response_Check_Parametr_Id(tmp1) << endl; 
//-------------------------------------------------------------------------------------------------------------------------------
		cout << endl;
		cout << "Clean CMD enter 2" << endl;
		cin >> begin;
		if (begin == '2')
			system("CLS");
	}
	Stop_Console_Windows
}	

array