Рекомендация: прочитайте задачу! Выполните ее и сравните полученный результат с картинкой 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
}