流缓冲区(cin,getline等)

时间:2014-11-07 03:37:37

标签: c++ iostream

有没有办法让用户输入一行字符到流缓冲区,然后将它们存储在不同的变量(不同类型)中?

例如,用户写下这些分数总和:

1/5 + 2/7

我有5个变量:

int numerator1, denominator1, numerator2, denominator2; char operat;

在做了一段我不知道的奇特代码之后,最后变量将存储以下内容

numerator1 = 1
denominator1 = 5
operat = +
numerator2 = 2
denominator2 = 7

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

嗯,我不确定具体算法,以实现此功能,但我可以建议以下内容。

取代使用多个变量,取整数数组和字符数组。 以字符串形式获取用户的输入。

  • 循环播放字符串并执行以下操作。

    如果,当前索引处的值是num,则迭代计数器直到您 找一个空格或一个算子(+ / - *)

    提取它的子sting并将其存储在int数组中 相应的指数。

    如果索引处的值是运算符,则将其存储在char数组中。

答案 1 :(得分:0)

你绝对应该使用AST,因为它们可以帮助你解析错误。但是,如果您正在寻找简单的解析功能,可以考虑使用sscanf。 PS:由于声誉问题而将其作为答案发布。

#include<cstring>                                                                       
#include<cstdio>                                                                        
#include<iostream>                                                                      
using namespace std;                                                                    

int main()                                                                              
{                                                                                       
    char s[1024];                                                                   
    scanf("%s", s);                                                                 

    int n1, n2, dn1, dn2;                                                           
    char op1, op2, op3;                                                             
    sscanf(s, "%d%c%d%c%d%c%d", &n1, &op1, &dn1, &op2, &n2, &op3, &dn2);            

    cout<<"\n"<<n1<<" "<<op1<<" "<<dn1<<" "<<op2<<" "<<n2<<" "<<op3<<" "<<dn2<<endl;
}