5. 复数包含实部和虚部,现要求对字符串”2+3i”进行解析,输出其实部和虚部的值,该方法可定义为:
bool TryParse(string s, out int real, out int image)
提示:可使用double.TryParse(string s, out double value)方法;可使用string的IndexOf(char c)来搜索某个字符在字符串中的位置;可使用string的SubString(int start, int length)来提取子串。
可通过下面程序来测试。
bool ok = TryParse(“2+3i”, out double real, out double image);
Debug.Assert(ok);
Debug.Assert(real == 2);
Debug.Assert(real == 3);
(有兴趣的同学可对-2-3i, -3i等复数值进行解析)。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace ConsoleApp7
{
class Program
{
static bool TryParse(string s, out int real, out int image)
{
real = 0;
image = 0;
int i = s.IndexOf("+");
int j = s.IndexOf("i");
if (i == -1 && j == -1)
{
real = Convert.ToInt32(s);
return true;
}
if (i == -1)
{
image = Convert.ToInt32(s.Substring(0, j));
return true;
}
real = Convert.ToInt32(s.Substring(0, i));
image = Convert.ToInt32(s.Substring(i + 1, j - i - 1));
return true;
}
static void Main(string[] args)
{
string s = "2+3i";
int real, image;
bool ok = TryParse(s, out real, out image);
Console.WriteLine(real + " " + image);
Debug.Assert(ok);
Debug.Assert(real == 2);
Debug.Assert(real == 3);
Console.ReadKey();
}
}
}