我想用 C++ 从字符串中提取值。我想这不是 C++ 的做法,但这种方式尤其行不通。有什么想法吗?
string line = "{10}{20}Hello World!";
int start;
int end;
string text;
// What to use here? Is the sscanf() a good idea? How to implement it?
cout << start; // 10
cout << end; // 20
cout << text; // Hello World!
您可以使用 String.find() 方法获取 '{' 和 '}' 的位置,然后通过 String.substr() 提取您想要的数据。
使用正则表达式的解决方案:
#include <iostream>
#include <regex>
std::string line = "{10}{20}Hello World!";
// Regular expression, that contains 3 match groups: int, int, and anything
std::regex matcher("\\{(\\d+)\\}\\{(\\d+)\\}(.+)");
std::smatch match;
if (!std::regex_search(line, match, matcher)) {
throw std::runtime_error("Failed to match expected format.");
}
int start = std::stoi(match[1]);
int end = std::stoi(match[2]);
std::string text = match[3];
在 sscanf 中,文本前面不需要有“&”,因为字符串名称已经是指向其起始地址的指针。
sscanf(line, "{%d}{%d}%s", &start, &end, text);