-1

我有一个自动机理论项目,我想将算法转换为编程语言(不管用什么编程语言来解决这个问题)

嗯,我有这些命令

我们输入一个字符串,然后将其转换为 char 以便我们进行比较,

例如我们输入了这个输入

01001

为了清楚起见,我将添加更多输入以了解我的意思,

01000001

{有效输入}

101101

{错误输入}

0

{错误输入}

我们将检查第一个数字是否为0,如果是,我们将此字符串复制到另一个数组1,然后将其转换为1,如果相同则将其复制到数组2,然后在这里我们需要使用for或进入一个循环foreach,我们想检查下一个值是否为 0(没有最后一个字符),所以我使用 a.length-1 来确保它不会使用最后一个,当我们看到新值 1 时,我们移动到最后一个数组,必须为 1。我们将使用 Console.WriteLine(""); 程序遵循顺序

我做了类似的东西(在 C# 中):

string s= Console.ReadLine();
var a = s.ToCharArray();

Console.WriteLine("Original String: {0}",s);

//for (int k = 4; k < a.Length; k++) {
if (a[0] == '0' && a[1] == '1' && a[a.Length-1] == '1') {

    for (int r = 2; r < a.Length-1; r++) {
        if (a[r] == '0')
        {
            Console.WriteLine("The Language is Right.");

        }              
    }               
}

如何制作新数组并复制并使用它来签出

4

1 回答 1

1

实现有限自动机的直接方法是循环输入并将状态存储在变量中:

string s= Console.ReadLine();
int state = 0;
foreach (char c in s.ToCharArray())
{
    if (state == 0 && c == '0')
        state = 1;
    else if (state == 0 && c == '1')
        state = -1;
    else if (state == 1 && c == '1')
        state = 2;
    else if (state == 1 && c == '0')
        state = -1;
    else if (state == 2 && c == '1')
        state = 3;
    else if (state == 3)
        state = -1;
}
bool accepted = state == 3;
Console.WriteLine(accepted);
于 2017-06-02T12:17:06.363 回答