ccrreesshhaanndd
Новичок
- Статус
- offline
- Регистрация
- 21.06.2022
- Сообщения
- 3
- Репутация
- 0
напиши парсер на c++
#include <iostream>
#include <string>
// Функция-парсер
double parseExpression(const std::string& input) {
// Создаем переменные для хранения текущих операторов и операндов
double operand = 0.0;
char op = '+';
// Проходимся по строке посимвольно
for (int i = 0; i < input.length(); ++i) {
// Пропускаем пробелы
if (input[i] == ' ') {
continue;
}
// Если символ - цифра, считываем операнд
if (isdigit(input[i])) {
int start = i;
// Ищем конец числа
while (i < input.length() && (isdigit(input[i]) || input[i] == '.')) {
++i;
}
// Конвертируем строку в число
operand = std::stod(input.substr(start, i - start));
--i;
} else {
// Если символ - оператор, обрабатываем операцию
switch (op) {
case '+':
operand += parseExpression(input.substr(i + 1));
break;
case '-':
operand -= parseExpression(input.substr(i + 1));
break;
case '*':
operand *= parseExpression(input.substr(i + 1));
break;
case '/':
operand /= parseExpression(input.substr(i + 1));
break;
}
// Сохраняем текущий оператор
op = input[i];
}
}
return operand;
}
int main() {
// Пример использования парсера
std::string input = "5 + 8 * 2 - 4 / 2";
double result = parseExpression(input);
std::cout << "Результат: " << result << std::endl;
return 0;
}
А можешь сделать парсер цифр с веб сайта?Конечно, вот пример простого парсера на C++:
C++:#include <iostream> #include <string> // Функция-парсер double parseExpression(const std::string& input) { // Создаем переменные для хранения текущих операторов и операндов double operand = 0.0; char op = '+'; // Проходимся по строке посимвольно for (int i = 0; i < input.length(); ++i) { // Пропускаем пробелы if (input[i] == ' ') { continue; } // Если символ - цифра, считываем операнд if (isdigit(input[i])) { int start = i; // Ищем конец числа while (i < input.length() && (isdigit(input[i]) || input[i] == '.')) { ++i; } // Конвертируем строку в число operand = std::stod(input.substr(start, i - start)); --i; } else { // Если символ - оператор, обрабатываем операцию switch (op) { case '+': operand += parseExpression(input.substr(i + 1)); break; case '-': operand -= parseExpression(input.substr(i + 1)); break; case '*': operand *= parseExpression(input.substr(i + 1)); break; case '/': operand /= parseExpression(input.substr(i + 1)); break; } // Сохраняем текущий оператор op = input[i]; } } return operand; } int main() { // Пример использования парсера std::string input = "5 + 8 * 2 - 4 / 2"; double result = parseExpression(input); std::cout << "Результат: " << result << std::endl; return 0; }
Этот пример парсит и вычисляет простое выражение с операциями сложения, вычитания, умножения и деления. Однако, обратите внимание, что он не учитывает приоритет операций или скобки.
Конечно! Для парсинга цифр с веб-сайта можно использовать библиотекуА можешь сделать парсер цифр с веб сайта?
curl
для загрузки HTML-страницы и regex
для поиска цифр в полученном HTML-коде. Вот пример кода на C++:#include <iostream>
#include <curl/curl.h>
#include <regex>
// Функция обратного вызова для записи полученных данных
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
size_t totalSize = size * nmemb;
output->append((char*)contents, totalSize);
return totalSize;
}
// Функция для парсинга цифр с веб-сайта
void parseNumbersFromWebsite(const std::string& url) {
CURL* curl = curl_easy_init();
if (curl) {
std::string htmlCode;
// Устанавливаем URL для загрузки
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
// Устанавливаем функцию обратного вызова для записи данных
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &htmlCode);
// Выполняем запрос
CURLcode res = curl_easy_perform(curl);
if (res == CURLE_OK) {
// Парсим цифры с помощью регулярного выражения
std::regex numberRegex(R"(\d+)"); // Ищем все непрерывные последовательности цифр
std::smatch matches;
std::string::const_iterator iterStart = htmlCode.cbegin();
std::string::const_iterator iterEnd = htmlCode.cend();
while (std::regex_search(iterStart, iterEnd, matches, numberRegex)) {
for (const auto& match : matches) {
std::cout << match << std::endl;
}
iterStart = matches[0].second;
}
} else {
std::cerr << "Ошибка загрузки страницы: " << curl_easy_strerror(res) << std::endl;
}
// Освобождаем ресурсы
curl_easy_cleanup(curl);
} else {
std::cerr << "Ошибка инициализации CURL" << std::endl;
}
}
int main() {
std::string url = "https://example.com"; // Замените URL на тот, который вам нужен
parseNumbersFromWebsite(url);
return 0;
}
curl
для загрузки HTML-страницы по заданному URL-адресу. Затем мы используем регулярное выражение, чтобы найти все непрерывные последовательности цифр в HTML-коде и выводим их на экран.