gpt4 book ai didi

c++ - 使用 C++ get(char& c); 读取文件时行尾字符是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:19 26 4
gpt4 key购买 nike

我的问题是我第一次尝试为 ascii 文本文件编写一个非常基本的词法分析器。到目前为止,它正确读取并与我的 token 列表进行比较,但是我无法在没有空格或按 enter 键的情况下获取最终 token 。在将字符串与我的标记列表进行比较之前,我尝试使用定界符 ^Z ASCII 26 作为另一个选择。这没有用。我还尝试将 f->eof() 检查移动到比较位置下方,看看它是否会阻止它,然后检查 eof 标志。我没有运气。谁能启发我?下面是读取方法的代码。 m_TokenList 只是一个字符串类型的 vector 。

void CelestialAnalyzer::ReadInTokens(ifstream *f){
vector<string> statement;
vector<string> tokens;
string token;
char c;
do{
f->get(c); // Read in each character
if(f->eof())
break;

if(c == '\n' || c == ' ' || c == '^Z' || c == '\r'){ // 26 ASCII ^Z (end of file marker)
for(unsigned int i=0; i<m_TokenList.size(); i++){
if(!token.compare(m_TokenList[i])){
tokens.push_back(token);
token.clear();
}
}
} else {
token.push_back(c); // Add it to the token array
}
} while (true);





f->close();

for(unsigned int i=0; i<tokens.size(); i++){
cout << "Found Token: " << tokens[i].c_str() << endl;
}

m_TokenList 被初始化为

CelestialAnalyzer::CelestialAnalyzer(){
m_TokenList.push_back("KEY"); // Prints data
m_TokenList.push_back("GETINPUT"); // Grabs user data
m_TokenList.push_back("+"); // Addition/Concation
m_TokenList.push_back("-"); // Subtraction
m_TokenList.push_back("=="); // Equator
m_TokenList.push_back("="); // Assignment
m_TokenList.push_back(";"); // End statement
m_TokenList.push_back(" "); // Blank
m_TokenList.push_back("{"); // Open Grouping
m_TokenList.push_back("}"); // Close Grouping
m_TokenList.push_back("("); // Parameter opening
m_TokenList.push_back(")"); // Parameter closing
for(unsigned int i=48; i<=57; i++){
string s; s.push_back((char)i);
m_TokenList.push_back(s); s.clear();
}
}

读取测试文件就是这个简单的例子。 1 + 2 = key

它将注册除“KEY”以外的所有内容,除非其后有空格或换行符。

最佳答案

你为什么不直接删除:

if(f->eof())
休息;

和使用


if(f->eof() || c == '\n' || c == ' ' || c == '^Z' || c == '\r'){

然后断了?这样,当您点击 EOF 时,您将添加您拥有的任何剩余 token 。

或者,您可以在跳出循环后检查 token 是否为非空,并在这种情况下添加它。

关于c++ - 使用 C++ get(char& c); 读取文件时行尾字符是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com