/ Published in: C
parseint, parsefloat - functions for getting values of parameters from string like as str = "HDD=160; CPU=2.2;RAM=1024". Using: int i; float f; parseint(str, "HDD", &i); parsefloat(str, "CPU", &f);
Expand |
Embed | Plain Text
#include <iostream> #include <cstring> // (auxiliary function) //str - input string, substr - substring, out - array where we get result //Example. Input parameters: str == "HDD=160; CPU=2.2;RAM=1024;min=-5.2;max=5.7;speed=3.1;a=-4", substr == "CPU" // Output: out == "1024" //str - входная строка (например, "HDD=160; CPU=2.2;RAM=1024"). Разделитель целой и дробной частей - точка //substr - название параметра, значение которого ищется (например, "CPU") //out - указатель на предварительно выделенный массив. В него запишется значение параметра (для "CPU" это "2.2") //max - если не равен нулю то используется для избежания переполнения массива out. Если равен 0, то переполнение не контролируется. //max - это размер массива out bool find_param_value(const char* str, const char* substr, char* out, size_t max = 0) { char *p = strstr(str, substr); if (!p) return false; char digits[] = "-0123456789"; p = strpbrk(p, digits); if (!p) return false; char spaces[] = " ;"; char *p2 = strpbrk(p, spaces); if (!p2) p2 = const_cast<char*>(str) + strlen(str); size_t size = p2 - p; if (max == 0 || size < max) { strncpy(out, p, size); out[size] = 0; return true; } else return false; } bool parse_int(const char* str, const char* substr, int* param) { size_t max = 64; char strvalue[max]; if (find_param_value(str, substr, strvalue, max)) { *param = atoi(strvalue); return true; } else return false; } bool parse_float(const char* str, const char* substr, float* param) { size_t max = 64; char strvalue[max]; if (find_param_value(str, substr, strvalue, max)) { *param = atof(strvalue); return true; } else return false; } int main() { int vali; float valf; char *str = "s=12;RAM = 1024;HDD = 320;CPU = 2.14;size=1;pi=3.14;iterations=5000"; bool bi = parse_int(str, "iterations", &vali); bool bf = parse_float(str, "pi", &valf); return 0; }
You need to login to post a comment.
