格式化字符串类
//格式化字符串类(用于对字符串进行格式化读取)
class FormatString
{
//需要格式化的字符串
public string _String = "";
//用于格式化的分隔符
public char _Separator = ' ';
//构造方法1
public FormatString(String temp)
{
_String = temp;
_String.Trim();//消除字符串两边的空格
}
//构造方法2
public FormatString()
{
_String = "";
}
//类方法:获取一个字符串
public string ReadString()
{
//获取以分隔符分割的字符串
int location = _String.IndexOf(_Separator);
string value = "";
if (location != -1)
{
//获取前面的字符
value = _String.Substring(0, location);
//获取后面的字符串(不包含location)
_String = _String.Substring(location + 1);
}
else
{
value = _String.Substring(0, _String.Length);
_String = "";
}
//去掉空格
_String = _String.Trim();
return value;
}
//类方法:读取一个int32型整数
public int readInt()
{
//获取以分隔符分割的字符串
int location = _String.IndexOf(_Separator);
string value = "";
if (location != -1)
{
//获取前面的字符
value = _String.Substring(0, location);
//获取后面的字符串(不包含location)
_String = _String.Substring(location + 1);
}
else
{
value = _String.Substring(0, _String.Length);
_String = "";
}
//去掉空格
_String = _String.Trim();
return Convert.ToInt32(value);
}
//类方法:读取一个double型整数
public double readDouble()
{
//获取以分隔符分割的字符串
int location = _String.IndexOf(_Separator);
string value = "";
if (location != -1)
{
//获取前面的字符
value = _String.Substring(0, location);
//获取后面的字符串(不包含location)
_String = _String.Substring(location + 1);
}
else
{
value = _String.Substring(0, _String.Length);
_String = "";
}
//去掉空格
_String = _String.Trim();
//获取分数中的'/'的位置,以判断是分数还是纯小数
location = value.IndexOf('/');
//判断是分数还是纯小数? 如果确实是分数,则进行除法运算
if (location != -1)
{
//获取被除数和除数
int num1 = Convert.ToInt32(value.Substring(0, location));
int num2 = Convert.ToInt32(value.Substring(location + 1, value.Length - location - 1));
//返回一个Float型分数
return Convert.ToDouble(num1 * 1.0 / num2);
}
//如果是纯小数,则直接返回double
else
return Convert.ToDouble(value);
}
}
写入字符串
//写入初始温度
streamWriter.WriteLine("初始温度: " + _IniialTemperature);
//写入降温系数
streamWriter.WriteLine("降温系数: " + _CoefficientTemperature);
//写入每一温度的最大迭代次数
streamWriter.WriteLine("每一温度的最大迭代次数: " + _MaxIterateNumber);
//写入城市数量
streamWriter.WriteLine("城市数量: " + _CityNumber);
//写入一个空行
streamWriter.WriteLine("");
//写入城市坐标数组值
streamWriter.WriteLine("以下是城市坐标数组值: ");
string coordString = "";
for (int i = 0; i <= _CityNumber - 1; i++)
coordString = coordString + "城市" + i.ToString() + "(" + _CityCoord[i].X.ToString() + "," + _CityCoord[i].Y.ToString() + ") ";
streamWriter.WriteLine(coordString);
//写入一个空行
streamWriter.WriteLine("");
//写入两两城市间的距离数组值
string distString = " ";
streamWriter.WriteLine("以下是两两城市间的距离数组值:");
for (int i = 0; i <= _CityNumber - 1; i++)
{
distString = distString + "城市" + i.ToString() + " ";
}
streamWriter.WriteLine(distString);
distString = "";
for (int i = 0; i <= _CityNumber - 1; i++)
{
distString = "城市" + i.ToString() + " ";
for (int j = 0; j <= _CityNumber - 1; j++)
distString = distString + _CityDist[i, j].ToString("0000.0000") + " ";
streamWriter.WriteLine(distString);
}
}
读取字符串
FormatString _formatString = new FormatString();
//“初始温度:1000”
_formatString._String = streamReader.ReadLine();//读取“初始温度:1000”
_formatString.ReadString(); //读取“初始温度”
_IniialTemperature= _formatString.readInt(); //读取“1000”
//“降温系数:0.9”
_formatString._String = streamReader.ReadLine(); //读取“降温系数:0.9”
_formatString.ReadString();//读取“降温系数”
_CoefficientTemperature = _formatString.readDouble();//读取"0.9"
//每一温度的最大迭代次数:100
_formatString._String = streamReader.ReadLine();//读取“每一温度的最大迭代次数:100”
_formatString.ReadString(); //读取“每一温度的最大迭代次数:”
_MaxIterateNumber = _formatString.readInt(); //读取“100”
//城市数量:12
_formatString._String = streamReader.ReadLine();//读取“城市数量:12”
_formatString.ReadString(); //读取“城市数量:”
_CityNumber = _formatString.readInt(); //读取“12”
//读取一行空格
_formatString._String=streamReader.ReadLine();
//读取“以下是城市坐标数组值:”
_formatString._String=streamReader.ReadLine();
//为城市坐标数组分配相应的存储空间
_CityCoord = new Point[_CityNumber];
//为城市坐标数组分配存储空间
_CityDist = new double[_CityNumber, _CityNumber];
//读入一行数据
_formatString._String = streamReader.ReadLine();
//逐一读入城市的X坐标和Y坐标值
for (int i = 0; i <= _CityNumber - 1; i++)
{
//注意:这里设置了不同的分隔符
_formatString._Separator = '(';
_formatString.ReadString();
_formatString._Separator = ',';
_CityCoord[i].X = _formatString.readInt();
_formatString._Separator = ')';
_CityCoord[i].Y = _formatString.readInt();
}
//计算出所有两两城市之间的距离(注意:两两城市之间的距离是直接计算出来,而不是从文件中读出来的)
CalcCityDist();