我是c ++的新手,我正在编写一个从文件中读取代码的程序,并将其中的每个部分分类为标识符,括号,关键字等。
我正在使用if else语句执行此操作,除了括号和分号外,它的工作正常。
例如if(a== "=" ) cout << "a is the equal operator"
有效,但if(a== ";" ) cout << "a is a semicolon"
没有。我也尝试使用比较方法,它也没有用。
有人可以告诉我为什么会这样吗?
谢谢
void checkString(string a)
if(a=="("){
cout << "RPAR: " << a + "\n";
}
else if(a==")"){
cout << "LPAR: " << a + "\n";
}
else if(a.compare("{") == 0){
cout << "LBRAC: " << a + "\n";
}
else if(a=="}"){
cout << "RBRAC: " << a + "\n";
}
else{
cout << "IDENTIFIER: " << a + "\n";
}
}
int main (){
std::vector<string> STRINGS;
string STRING;
ifstream infile;
infile.open("m.c");
while(getline(infile,STRING,' ')){
STRINGS.push_back(STRING);
}
infile.close();
for(int i=0; i<STRINGS.size(); i++){
checkString(STRINGS[i]);
}
return 0;
}
如果a是括号或分号,程序将打印IDENTIFIER:{。
答案 0 :(得分:1)
如果a是c字符串,那么我会研究使用strcmp方法。如果它们是#include <string>
标题下的字符串。我会调查string::compare
答案 1 :(得分:0)
看起来问题出在getline(infile,STRING,' ')
上。
如果您的代码遇到\n
,\t
等,会发生什么?它将与您的令牌一起提取,您最终会得到一个";\n"
字符串,这与";"
更改用于标记文件的逻辑:
std::ifstream fin("m.c");
while (fin >> STRING ){
STRINGS.push_back(STRING);
}
fin.close();
或trim你的字符串。
<强>更新强>
请注意,只有当您的令牌被空格分隔时,此类令牌工具才有效(return 0 ;
将按预期工作,return 0;
将被标记为return
和{{ 1}})