如何将一行作为输入而不包含空格

时间:2015-06-26 20:24:05

标签: c++ string input stack getline

我正在开发一个项目,用于将后缀转换为中缀表达式。我被困了一段时间,但我有一部分工作,然后我意识到当我输入给用户时,我需要在每个操作数之间插入一个空格。我不知道如何接受一个字符串而不是包括空格我将如何去做。 getline不起作用,因为它包含空格。因此,而不是ab +我需要接受它:a b +。我不知道如何做到这一点不包括字符串。到目前为止,这是我的代码。

#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;

}

2 个答案:

答案 0 :(得分:0)

在C中,字符串本质上是一堆字符指针。有关如何通过移动指针从输入字符串中删除空格的一些示例,可以参考this SO post

答案 1 :(得分:0)

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

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

我已用此更新my answer to your other question