c++ 获取数字字符串的子串数值,比方给定字符串"123456",要获取第三位和第四位的数值,这里是34。
应用substr
应用substr截取字串,再应用c_str()获取字符数组,再应用atoi()转换为数字
结构字符数组
间接应用索引获取字符,构建字符数组,再应用atoi()转换为数字
代码
#include <string>#include <iostream>#include <chrono>using namespace std;int main(int argc, char* argv[]) { string val = "123"; int total = 1000000; std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now(); for (int i = 0; i < total; i++) { int tmp = atoi(val.substr(1, 2).c_str()); } std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now(); std::chrono::microseconds diff = std::chrono::duration_cast<std::chrono::microseconds>(end - start); cout << "using substr:" << diff.count() << "ms" << endl; start = std::chrono::system_clock::now(); for (int i = 0; i < total; i++) { char vals[2] = { val[1],val[2] }; int tmp = atoi(vals); } end = std::chrono::system_clock::now(); diff = std::chrono::duration_cast<std::chrono::microseconds>(end - start); cout << "using char[]:" << diff.count() << "ms" << endl; return 0;}
执行后果
论断
应用字符间接结构,性能是substr的十倍左右