Проверьте, содержит ли строка правильное выражение postfix - PullRequest
0 голосов
/ 13 мая 2019

У меня есть строка, которую необходимо проверить на правильность выражения postfix.
Допустимая строка постфикса: 1 2+, но не 1 2+, поскольку каждому символу требуется пробел. Кроме того, поскольку это строка, вы можете вводить слова, но они должны возвращать -1 для этой функции.

Я пытался использовать векторный массив со строками и проверять действительные значения, но когда пользователь вводит буквы, это, очевидно, создает проблему.

string postfix = "1 2 +"; // valid
string postfix = "soemthing"; // error
string postfix = "1 2+" ; // error since there is no space. 
if (!isdigit(postfix[0]))  
return -1;

int t;
string line = "55 124 4 5";
std::vector <int> ints;
    std::istringstream iss ( line, std::istringstream::in);
    int main() {
            while (iss >> t )
            {
                    ints.push_back(t);
            }

    if (!digit(ints[0]) || !digit(ints[0])) 
    return -1; 


    }

~

1 Ответ

0 голосов
/ 13 мая 2019

Из этого поста вы можете получить алгоритм проверки.В C ++:

int isValid(string postfix) {

    int l = postfix.size();
    char c;
    bool numStarted = false;
    int counter = 0;
    for (int i = 0; i < l; i++) {
        c = postfix.at(i);

        if (numStarted == true && c == ' ') {
            numStarted = false;
        } else if (numStarted == false && c == ' ') {
            return -1;
        } else if (c == '-' || c == '+' || c == '*' || c == '/') {
            if (counter < 2 || numStarted) {
                return -1;
            }
            counter--;
            numStarted = true;
        } else if (!isdigit(c)) {
            return -1;
        } else if (!numStarted && isdigit(c)) {
            counter++;
            numStarted = true;
        }
    }
    return (counter == 1 ? 1 : -1);
}

Для проверки:

int main(int argc, char** argv) {
    string postfix1 = "1 2 +"; // valid
    string postfix2 = "soemthing"; // error
    string postfix3 = "1 2+"; // error since there is no space.

    cout << isValid(postfix1) << endl;
    cout << isValid(postfix2) << endl;
    cout << isValid(postfix3) << endl;

    return 0;
}

вывод:

1
-1
-1
...