如何采取线的输入和不能包含空格(How to take a line as an input and

2019-11-03 21:15发布

我工作的一个项目,从后缀转换为中缀表达式。 我被卡住了一段时间,但我有工作然后我意识到我需要每个操作数之间inlcude空间的一部分,当我把它输入到user.I'm不知道如何采取一个字符串,不能包含空格我怎么会去这样做。 函数getline不起作用,因为它包含空格。 因此,而不是AB +的我需要接受它为:AB +。 我不知道如何做到这一点不包括字符串。 这是我到目前为止的代码。

#include "stack.h"

void convert(string expression){

    stack c;

    string post =" ";
    string rightop="";
    string leftop="";
    string op ="";

    for (int i =0; i<=expression.length()-1;i++){
        c.push(expression[i]);
        c.print();

        if (expression[i] == '*' ||
            expression[i] == '+' ||
            expression[i] == '-' ||
            expression[i] == '/'){
            cout<<c.top()<<endl;
            leftop=c.top();
            cout<<leftop<<endl;

            c.pop();


            rightop=c.top();
            cout<<rightop<<endl;
            c.pop();
            op=c.top();
            cout<<op<<endl;
            c.top()=expression[i+1];
            //c.pop();
            post="(" + leftop + " " + op + " " + rightop + ")";

            cout<<post<<endl;
        }


        //c.push(post);
    }
}







int main(){

    string expression;
    cout<<" Enter a Post Fix expression: ";


    getline(cin,expression);

    convert(expression);

    return 0;

}

Answer 1:

在C语言中,字符串基本上是一串字符指针。 您可以参考这个SO后对于如何从输入字符串通过移动指针删除空白的几个例子。



Answer 2:

您可以测试明确地针对每个字符" \t\r" ,或者您可以使用isspace中声明功能cctypes

for (int i =0; i<=expression.length()-1;i++){
    if (isspace(expression[i])) continue;
    // remaining unchanged ...

我已经更新我的回答您的其他问题这一点。



文章来源: How to take a line as an input and not include spaces