Brian_L
2020-09-13 11:25
采纳率: 100%
浏览 82

求大神,C++,读取相应的内容并输出,已给出部分代码,

求大神,很急,怎样完善get_token等以实现运行示例中的功能

该c++程序将从标准输入读取,并将相应的令牌写入标准输出,每行一个。
程序不打开文件。 它通过cin从标准输入中读取。 不使用或ifstream。

输入格式
输入将是任意行,包含令牌。 这是有效的令牌:

1: +=, 2: -=, 3: *=, 4: /=, 5: =, 6: !=, 7: <, 8: >, 9: <=, 10: >=, 11: if, 12: fi, 13: print, 14: return
15: 变量:26个单字母a到z
16: 整数:非空数字序列(0…9)

使用词法分析的最大munch方法:给定两个标记(<和<=,或p和print)之间的选择,请始终选择较长的标记。
忽略标记之前,之后和之间(但不是内部)的空格(由isspace()确定)。
但是,令牌并不总是由空格分隔。 a += b是三个单独的标记。 printa是两个标记,print和a。
忽略注释,该注释定义为#,后跟其余的行。 注释确实是令牌之间的中断。
输入中的大小写无关紧要, 所有输出必须为小写。
如果输入为iFg> R,则如果g,>,r,则输出必须为四个标记。
如果遇到无效的输入(例如&&),请生成一条包含无效输入的错误消息,然后停止程序。

运行示例:

图片说明

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
string progarm_name;

bool get_token(string &input, string &sym){

}
void analyze(istream &in){
    for(string line; getline(in, line);)
        analyze(line);
    }
}
void analyze(string input){
    for(string token; get_token(input, token):){
        cout << token << '\n';
    }
}
int main(int, char *argv[]){
    program_name = argv[0];
    analyze(cin);
    return 0;
    }
}

图片说明

图片说明

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2020-09-13 12:10
    已采纳

    之前的代码写了一半,正要补充,结果你给删除了。

    还有没有诚信

    请你把 https://ask.csdn.net/questions/1096715 中我贴出的代码复原,并且采纳,再继续帮你完成这个程序。

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace std;
    string progarm_name;
    
    bool get_token(string &input, string &sym){
    
    }
    void analyze(istream &in){
        for(string line; getline(in, line);)
            analyze(line);
        }
    }
    void analyze(string input){
        for(string token; get_token(input, token):){ //这里显然是分号
            cout << token << '\n';
        }
    }
    int main(int, char *argv[]){
        program_name = argv[0];
        analyze(cin);
        return 0;
        }
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题