Строковый метод доступа заставляет строку быть int C++

Я пытаюсь закодировать NFA в C++, который может распознать строку и определить, принята или отклонена эта строка. У меня есть строковый вход, который будет оцениваться как входящий.

Тем не менее, как только я перехожу к нему в функции valuInput() (в третьем вложенном цикле for, в операторе if), по какой-то причине программа не будет компилироваться, потому что она говорит, что in.at (i) считается int, поэтому нельзя сравнивать со строкой.

Я не понимаю, почему во всей программе это строка, но когда к ней обращаются, она внезапно становится int?

Я получаю следующую ошибку:

error: invalid operands to binary expression ('int' and
      'string' (aka 'basic_string<char, char_traits<char>, allocator<char> >'))
                                if(in[i] == currStates[j].transitions[k].symb)

Я предоставил весь свой код, если это поможет.

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <stdlib.h>
#include <vector>

using namespace std;

string num, SoA1, SoA2, currentState, symbol, tranState;

struct Transition;

struct State{
    bool startS = false;
    bool acceptS = false;
    string sym;
    vector<Transition> transitions;//transition between states
};

struct Transition{
    string symb;
    State to;
    State from;
};

struct NFA{
    vector<State> NFAStates;
    State start;
};

void evaluateInput(string in, NFA F)
{

    vector<State> currStates;
    currStates.push_back(F.start);

    if(in[1] == "1")
    {
        cout << "yes" << endl;
    }

    for(int i = 0; i < in.length(); i++)
    {
        cout << "input #: " << in[i] << endl;
        vector<State> next;
        for(int j = 0; j < currStates.size(); j++)
        {
            for(int k = 0; k < currStates[j].transitions.size(); k++)
            {
                if(in.at(i) == currStates[j].transitions[k].symb)
                {
                    next.push_back(currStates[j].transitions[k].to);
                }
            }
        }
        currStates = next;
    }
}

int main(int argc, char* argv[])
{
    char* fileName;
    string stringInput;
    if(argc > 1)
    {
        fileName = argv[1];
        stringInput = argv[2];
        //cout << stringInput << endl;
    }

    ifstream file(fileName);

    if(file.is_open())
    {
        NFA FA;
        string line;
        while(getline(file, line)){
            //cout << "1: " << line << endl;
            string ST;

            stringstream ss(line);
            getline(ss, ST, '\t');

            if(ST == "state")
            {
                State S;
                getline(ss, num, '\t');
                getline(ss, SoA1, '\t');
                getline(ss, SoA2);

                int num_i = stoi(num);
                S.sym = num_i;
                if((SoA1 == "start") || (SoA2 == "start"))
                {
                    S.startS = true;
                }

                if((SoA1 == "accept") || (SoA2 == "accept"))
                {
                    S.acceptS = true;
                }

                FA.NFAStates.push_back(S);
                if(S.startS == true){
                    FA.start = S;
                }
            }else if(ST == "transition")
            {
                Transition T;
                getline(ss, currentState, '\t');
                getline(ss, symbol, '\t');
                getline(ss, tranState);

                int currentState_i = stoi(currentState);
                int tranState_i = stoi(tranState);
                T.symb = symbol;

                for(int j = 0; j < FA.NFAStates.size(); j++)
                {
                    if(FA.NFAStates[j].sym == tranState)
                    {
                        T.to = FA.NFAStates[j];
                    }
                }

                for(int i = 0; i < FA.NFAStates.size(); i++)
                {
                    if(FA.NFAStates[i].sym == currentState)
                    {
                        T.from = FA.NFAStates[i];
                        FA.NFAStates[i].transitions.push_back(T);
                    }
                }
            }
        }

        evaluateInput(stringInput, FA);
    }
}

Спасибо за помощь.

0 ответов

Другие вопросы по тегам