运行时报"索引超出数组界限",如何解决!!!
来源:互联网 发布:java 父子线程 调用链 编辑:程序博客网 时间:2024/06/05 04:11
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace wordanylysis
{
public partial class wordanalysis : Form
{
public wordanalysis()
{
InitializeComponent();
}
private void okbutton_Click(object sender, EventArgs e)
{
//得到字符数组
char[] getch = textToCharArray();
//将得到的字符数组转换成分析后的单词数组
string[] stringArray = charArrayToStringArray(getch);
string[,] twoStringArray = stringArrayToTwoStringArray(stringArray);
printString(twoStringArray );
}
private void clearbutton_Click(object sender, EventArgs e)
{
this.textBox1.Clear();
}
private void exitbutton_Click(object sender, EventArgs e)
{
Application.Exit();
}
private char[] textToCharArray()
{
string stringTemp;
stringTemp = this.textBox1.Text;
char[] getch = stringTemp.ToCharArray();//要处理的字符都在getch这个数组中。
return getch;
}
private void stringToArrayString(ref string[] stringArrange, string st)
{
if (stringArrange[0] == "")
{
stringArrange[0] = st;
}
else
{
string[] oldA = stringArrange;//刚得到的字符串
int i = oldA.Length + 1;
stringArrange = new string[i];//申请一个长一个的字符数组。
oldA.CopyTo(stringArrange, 0);//将先前的字符数组考到现在这个数组中。
stringArrange[stringArrange.Length - 1] = st;
}
}
private void oneArrayToTwo(ref string[,] twoArray, ref int j)
{
string[,] tempArray = twoArray;
twoArray = new string[2, j + 2];
for (int x = 0; x < 2; x++)
{
for (int y = 0; y < j + 1; y++)
{
twoArray[x, y] = tempArray[x, y];
}
}
j = j + 1;
}
private string[,] stringArrayToTwoStringArray(string[] stringArray)
{
//存放单词标识后的结果。
string[,] twoArray = new string[2, 1];
//单词的标志
int j = 0;
//每循环一次,把一个单词归于一类,即前面加上一个数字。
for (int i = 0; i < stringArray.Length; i++)
{
//保留字 1
if (stringArray[i] == "main"
|| stringArray[i] == "int"
|| stringArray[i] == "float"
|| stringArray[i] == "printf"
|| stringArray[i] == "if"
|| stringArray[i] == "for"
|| stringArray[i] == "while"
|| stringArray[i] == "do"
|| stringArray[i] == "return"
|| stringArray[i] == "break"
|| stringArray[i] == "continue")
{
twoArray[0, j] = "1";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//运算符 2
else
if (stringArray[i] == "+"
|| stringArray[i] == "-"
|| stringArray[i] == "*"
|| stringArray[i] == "/"
|| stringArray[i] == ">"
|| stringArray[i] == "<"
|| stringArray[i] == ">="
|| stringArray[i] == "<="
|| stringArray[i] == "!="
|| stringArray[i] == "=="
|| stringArray[i] == "++"
|| stringArray[i] == "--"
|| stringArray[i] == "=")
{
twoArray[0, j] = "2";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//分隔符 3
else
if (stringArray[i] == "("
|| stringArray[i] == ")"
|| stringArray[i] == "{"
|| stringArray[i] == "}"
|| stringArray[i] == "["
// || stringArray[i] == "]"
//|| stringArray[i] == ","
// || stringArray[i] == ";"
// || stringArray[i] == ":"
// || stringArray[i] == "/""
// || stringArray[i] == "/*"
/*|| stringArray[i] == "*"*/)
{
twoArray[0, j] = "3";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//数字 4
else
if (stringArray[i].ToCharArray()[0] >= '0' &&
stringArray[i].ToCharArray()[0] <= '9')
{
twoArray[0, j] = "4";//数字
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
//其它 5(变量等)
else
{
twoArray[0, j] = "5";
twoArray[1, j] = stringArray[i];
this.oneArrayToTwo(ref twoArray, ref j);
}
}
return twoArray;
}
private void printString(string[,] twoStringArray)
{
//提示说明
this.textBox2.Text = "1 -> 保留字" + "/r/n" +
"2 -> 运算符" + "/r/n" +
"3 -> 分隔符" + "/r/n" +
"4 -> 数字 " + "/r/n" +
"5 -> 其它" + "/r/n";
//输出二维数组中的数据
for (int x = 0; x <twoStringArray.Length / 2; x++)
{
for (int y = 0; y < 2; y++)
{
this.textBox2.Text = this.textBox2.Text + twoStringArray[y, x] + " ";
if (y == 1)
{
this.textBox2.Text = this.textBox2.Text + "/r/n";
}
}
}
}
private string[] charArrayToStringArray(char[] getch)
{
string[] stringArrange={""} ;//用这个字符串数组存放词法分析后得到的单词。
char charTemp;
string stringSave = "";// 存放一个分析得到的单词
//一次循环得到一个单词。
for(int i = 0;i < getch.Length;i++)
{
charTemp = getch[i];
//begin with character
if (charTemp >= 'a' && charTemp <= 'z' || charTemp >='A' && charTemp <= 'Z')
{
stringSave = charTemp.ToString();
i = i + 1;
int test = 0;//判断循环是否结束,1 为结束。
while (test == 0)
{
charTemp = getch[i];
if (charTemp >= 'a' && charTemp <= 'z' || charTemp >= 'A' && charTemp <= 'Z' )
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test = 1;
}
}
else
stringToArrayString(ref stringArrange, stringSave);
stringSave = "";
if (charTemp >= '0' && charTemp <= '9' )
{
stringSave = charTemp.ToString();
i = i + 1;
int test = 0;//判断循环是否结束,1 为结束。
while (test == 0)
{
charTemp = getch[i];
if (charTemp >= '0' && charTemp <= '9')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test = 1;
}
}
else
stringToArrayString(ref stringArrange, stringSave);
stringSave = "";
if( charTemp == '(' ||charTemp == ')'||charTemp == '{'||charTemp == '}'||charTemp == '[' )
{
stringSave = charTemp.ToString();
i = i + 1;
int test = 0;//判断循环是否结束,1 为结束。
while (test == 0)
{
charTemp = getch[i];
if (charTemp == '(' || charTemp == ')' || charTemp == '{' || charTemp == '}' || charTemp == '[')
{
stringSave = stringSave + charTemp.ToString();
i = i + 1;
}
else
test = 1;
}
}
else
stringToArrayString(ref stringArrange, stringSave);
}
return stringArrange;
}
}
}
- 运行时报"索引超出数组界限",如何解决!!!
- System.IndexOutOfRangeException: 索引超出了数组界限
- sql server 索引超出了数组界限
- MySql Blob图片类型存储Bug解决:索引超出了数组界限错误
- vs2005 sp1 网站发布 索引超出了数组界限。
- 索引超出了数组界限(Microsoft.SqlServer.Smo)
- 有关“索引超出了数组界限”的错误提示
- Styles.Render索引超出了数组界限-搞定
- 索引超出了数组界限(Microsoft.SqlServer.Smo)
- 用ThoughtWorks.QRCode生成二维码时出现“索引超出了数组界限”的错误
- .net reflector 反编译失败 索引超出了数组界限问题处理方法
- 处理【aspnet_merge.exe”已退出,代码为1。An error occurred when merging assemblies: 索引超出了数组界限。】
- 偏移量和长度超出数组的界限,或者计数大于从索引到源集合结尾处
- 索引超出了数组界限(Microsoft.SqlServer.Smo) SSMS连接远程SQL Server服务器是很方便的。 昨天我用SQL Server 2008 SSMS连接SQL Server
- 数组界限
- 修正Firebird Net Provider 1.7“偏移和长度已超出数组界限”BUG(提供下载)
- C#中偏移量和长度超出数组的界限的问题
- 解决Jquery easyui中dialog、window、panel三个组件拖动超出父元素界限问题
- 2007.05.09 见律师,申请专利
- 利用AspNetPage分页控件,结合高效SQL存储过程
- 那个冬天(摘自联商水园里上尉的帖子)
- 判断平年闰年和判断键盘输入是否为数字
- 再见了Embed--一些媒体播放器的符合web标准的代码
- 运行时报"索引超出数组界限",如何解决!!!
- 面向组件与面向对象
- IOC学习
- void* PVOID 加减操作注意事项。
- Web标准建站常见错误和校验方法
- 百度启动网站认证评级
- 在eclipse中解决java.lang.UnsupportedClassVersionError 错误
- 狂人日记1
- 安家了