c++ - 用括号解析 C++ 中的字符串
问题描述
我必须在 C++ 中解析字符串才能得到双打。字符串的格式类似于 [(a,b)-(c,d)],其中 a、b、c 和 d 将是双变量。
我试图使用 stringstrem,但它不接受 const char 参数,所以我现在不知道如何解决它。
我的代码现在看起来像:
ss >> "[(" >> a >> "," >> b >> ")-(" >> c >> "," >> d >> ")]";
但遗憾的是它不起作用:(
例如:[(1.2,3.4)-(6.5,7.4)]。而且我要:
a=1.2;
b=3.4;
c=6.5;
d=7.4;
解决方案
使用输入流,您需要读取变量的输入。您可以使用 . 读入 achar
或字符串std::istream::read
。理想情况下,您会检查字符实际上是否符合预期,以捕捉并可能拒绝说__1.2-3.4@#~6.5,7.8++
char chr;
ss >> chr >> chr >> a >> chr >> b >> chr >> chr >> chr >> c >> chr >> d >> chr >> chr;
或者,您可以将其读取为字符串,然后您可以使用 C++<regex>
功能来匹配它,可能类似于:
^\[\((\d+\.\d+),(\d+\.\d+)\)-\((\d+\.\d+),(\d+\.\d+)\)\]$
这将为您提供 4 个成功的捕获组,然后您可以将其转换为双打。如果例如允许额外的空格、小数点是可选的等,您可以修改它。
如果格式有任何变化,例如有时您会得到 3 个数字,例如,[(1.2,3.4)-(6.5,7.4)+(1.5,2)]
您需要进行比>>
操作员直接支持的更多的深度解析。
可能使用基于ss >> chr
读取内容的逻辑,或者通过基于前一个匹配结束位置的正则表达式循环(而不是一次匹配整个字符串),尽管事情变得更加先进。
推荐阅读
- node.js - 在节点 JS 中读取大型 json 文件
- python - VideoCapture() 相机索引和 QCameraInfo.availableCameras() 索引不匹配
- google-sheets - 如何在 Google Sheet 的数组中进行乘法运算?
- python - 检查目标时出错:预期 dense_2 的形状为 (1,) 但得到的数组的形状为 (11627,)
- node.js - 如何使用无服务器将二进制文件(如图像)上传到 aws api 网关
- python - Python:我的全局变量未定义
- algorithm - 使用中序遍历的二叉树序列化和反序列化
- ruby-on-rails - 由于sign_in不起作用,如何使用设计更改rails中的current_user
- inno-setup - Inno Setup 获取默认浏览器
- c++ - C++,printf vs cout 性能