C++ 将std::string转换为complex<;双倍>;适用于多种格式

C++ 将std::string转换为complex<;双倍>;适用于多种格式,c++,string,complex-numbers,C++,String,Complex Numbers,编写函数的最佳方法是什么std::complex str2 complex(std::string str)>应该可以工作,但是对于其他的,我不确定应该采取什么方法。看起来您需要一个解析器。对于所有这些问题,您只需要在第一个以外的情况下检测“+”和“i” 我的想法如下: 如果“+”是第一个符号,则从第二个字符开始 通读下一个“+”的字符串。任何读数都将被视为一个单位 如果字符串中有一个“i”,这就是imag,请将该值解析为double imag。否则,解析为双实数。注意“*” 重复2->3

编写函数的最佳方法是什么
std::complex str2 complex(std::string str)std::string
转换为
std::complex

我假设给定给这个函数的字符串只包含一个复数,但是如果能够进行一些错误检查就好了

我希望它适用于以下格式:

对于数字real=
1.0
,imag=
0.0

(1.0)
(1.0,2.0)
1.0+2.0i
1.0 + 2.0i
1.0+2.0*i
1.0 + 2.0*i
+1.0+2.0i
+1.0+2.0*i
+2.0*i+1.0
2.0*i+1.0
2.0i+1.0
对于数字real=
1.0
,imag=
2.0

(1.0)
(1.0,2.0)
1.0+2.0i
1.0 + 2.0i
1.0+2.0*i
1.0 + 2.0*i
+1.0+2.0i
+1.0+2.0*i
+2.0*i+1.0
2.0*i+1.0
2.0i+1.0

对于前两个,标准的
操作符>>
应该可以工作,但是对于其他的,我不确定应该采取什么方法。

看起来您需要一个解析器。对于所有这些问题,您只需要在第一个以外的情况下检测“+”和“i”

我的想法如下:

  • 如果“+”是第一个符号,则从第二个字符开始
  • 通读下一个“+”的字符串。任何读数都将被视为一个单位
  • 如果字符串中有一个“i”,这就是imag,请将该值解析为double imag。否则,解析为双实数。注意“*”
  • 重复2->3