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