Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- #define MAX_BUFFER 1024
- int hex_to_dec(char c)
- {
- if ((c >= '0') && (c <= '9'))
- return c - 48;
- if ((c >= 'A') && (c <= 'F'))
- return c - 55;
- if ((c >= 'a') && (c <= 'f'))
- return c - 87;
- /// В каком случае напечатается это сообщение об ошибке?
- cerr << "Error!" << endl;
- return 0;
- }
- char parse_char(string str, int i)
- {
- return (hex_to_dec(str[i]) << 4) + hex_to_dec(str[i + 1]);
- }
- string decode(string str) {
- string res = "";
- unsigned int i = 0;
- while (i < str.size()) {
- char c = str[i];
- switch (c) {
- case '%':
- if (i + 2 >= str.size()) {
- /// Приведите пример входных данных, на которых возникнет такая ошибка
- cerr << "Error!" << endl;
- return "";
- }
- res += parse_char(str, i + 1);
- i += 3;
- break;
- case '+':
- c = ' ';
- /// Почему здесь не увеличиваем i?
- default:
- res += c;
- i++;
- }
- }
- return res;
- }
- void print_key_value(string key, string value) {
- if (key.empty()) /// Зачем это условие? Ведь уже есть одна проверка на пустой ключ
- return;
- cout << decode(key) << ": " << decode(value) << endl;
- }
- int main(int argc, char* argv[]) {
- if (argc < 2)
- return 0;
- char* input = argv[1];
- char buffer[MAX_BUFFER];
- int pos = 0;
- string key;
- string value;
- int i = 0;
- while (input[i] != '\0') {
- char c = input[i];
- switch (c) {
- case '=':
- key = string(buffer, pos);
- if (key.empty())
- cerr << "Error!" << endl;
- pos = 0;
- break;
- case '&':
- value = string(buffer, pos);
- /// Что будет, если сразу встретится '&' ?
- print_key_value(key, value);
- key = "";
- value = "";
- pos = 0;
- break;
- default:
- buffer[pos] = c;
- pos++;
- }
- i++;
- }
- if ((key == "") && (pos != 0)) {
- /// Приведите пример, когда произойдет эта ошибка
- cerr << "Error!" << endl;
- }
- value = string(buffer, pos);
- print_key_value(key, value); /// Зачем еще один вызов этой функции?
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement