Сравните переменные с карты с вектором в C ++ - PullRequest
0 голосов
/ 05 марта 2020

Итак, у меня есть вход

x=20
y=40
z=x+y
w=20+40+80
s1="str1"
s2=s1+w

Я храню переменные без операторов в карте как имя переменной и ее тип, например x int, y int и т. Д. c.

map <string,string> finalMap

Я делю переменные каждой строки на вектор строки для каждой строки как токены = {20,40,80}; tokens = {s1, w} и т. д. c.

vector<string> tokens;

Я хочу сравнить переменные в токенах и finalMap, если я уже объявил переменную токенов на карте. Например, z = x + y, x и y уже объявлены в finalMap, я хочу проверить, были ли эти x и y уже объявлены в finalMap, чтобы получить их строку dataType или int. Я использую double для l oop, но по какой-то причине он не работает.

for(auto i=finalMap.begin(); i!=finalMap.end();i++){
    for(int j=0; j<tokens.size(); j++){
        if(i->first==tokens.at(j)){
            tokens.at(j)==i->second;
        }
    }
}

У меня проблемы с for для l oop выше, потому что, когда я проверяю значения после, кажется, что это не заменяет dataType из карты.

for(int i=0; i<tokens.size()-1; i++){
    if(checkType(tokens.at(i))!=checkType(tokens.at(i+1)))
        return "undefined";
    else
        return checkType(tokens.at(i));
} 

checkType () возвращает переменный тип строки, будь то string, int или list. Пожалуйста, не понижайте рейтинг. Я новый пользователь, если вам нужно больше подробностей, просто дайте мне знать, я объясню.

Вот вывод:

s1:str     
s2:undefined  
w:int          
x:int       
y:int     
z:undefined   

1 Ответ

1 голос
/ 05 марта 2020

Двойное равенство == - это сравнение, а не присвоение.

if(i->first==tokens.at(j)) {
    tokens.at(j) == i->second;
}

Вы имели в виду использование одинарных равных =

if(i->first==tokens.at(j)) {
    tokens.at(j) = i->second;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...