实验内容
编制一个程序,该程序的功能是能打开一个高级语言程序的源文件,扫描该源程序文件的字符,并识别该源程序文中的关键字和保留字,把识别的结果保存到一个新的文件中,格式是关键字或保留字(该关键字或保留字所在的行号) 。
“input.txt"为源程序输入代码:
"output.txt"为识别结果保存的新的文件:
"keyword.txt"为保存关键字字符串的文件:
源代码如下:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
// 将得到的一行字符串以空格为间隔分隔开
vector<string> getWord(string line) {
int signal_1 = 0;
int signal_2 = 0;
string str;
vector<string> result;
for (int i = 0; i < line.length(); i++)
{
// 避免部分代码关键字前含有Tab导致识别失败
if (line[i] != '\t')
{
signal_1 = i;
break;
}
}
while (signal_1 < line.length()) {
signal_2 = line.find(' ', signal_1);
if (signal_2 == -1)
signal_2 = line.length();
str = line.substr(signal_1, signal_2 - signal_1);
result.push_back(str);
signal_1 = signal_2 + 1;
}
return result;
}
// 判断是否是关键字,从“keyword.txt”中获取关键字字符串
bool isKeywords(string str) {
string keyword;
ifstream intextfile;
intextfile.open("keyword.txt");
if (!intextfile.is_open()) {
cout << "Open keyword.txt error! " << endl;
return 0;
}
// 如果属于关键字则返回true
while (getline(intextfile, keyword)) {
if (str == keyword) {
return true;
}
}
intextfile.close();
return false;
}
int main() {
string line;
int count = 1;
vector<string> words;
// Open input.txt
ifstream inputfile;
inputfile.open("input.txt");
if (!inputfile.is_open())
{
cout << "Open input.txt error!" << endl;
return 0;
}
// Open output.txt
ofstream outputfile;
outputfile.open("output.txt");
if (!outputfile.is_open())
{
cout << "Open output.txt error!" << endl;
return 0;
}
// 获取input文件的内容并将符合关键字的内容写入output文件
while (getline(inputfile, line))
{
words = getWord(line);
for (int i = 0; i < words.size(); i++)
{
if (isKeywords(words.at(i))) {
outputfile << count << ": " << words.at(i) << endl;
cout << count << ": " << words.at(i) << endl;
}
}
count++; // 记录对应的行数
}
inputfile.close();
outputfile.close();
return 0;
}