比较c++中的字符串
Comparing Strings in c++
我是c++的新手,我正在编写一个从文件中读取代码的程序,并将文件的每个部分分类为标识符、括号、关键字等。
我使用if-else语句来完成这项工作,除了使用括号和分号外,它运行良好。
例如if(a== "=" ) cout << "a is the equal operator"
起作用,但if(a== ";" ) cout << "a is a semicolon"
不起作用。我也试过用compare方法,但也没用。
有人能告诉我为什么会发生这种事吗?
感谢
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:{.
如果a是c字符串,那么我会考虑使用strcmp方法。如果它们是#include <string>
标头下的字符串。我会研究字符串::compare
问题似乎出在getline(infile,STRING,' ')
上。
如果您的代码命中n
、t
等,会发生什么情况?它将与您的令牌一起提取,您最终会得到一个字符串,如";n"
,这与";"
不同
要么更改用于标记文件的逻辑:
std::ifstream fin("m.c");
while (fin >> STRING ){
STRINGS.push_back(STRING);
}
fin.close();
或者修剪一下你的绳子。
更新:
请记住,只有当您的令牌被空格分隔时,这种令牌化器才会工作(return 0 ;
将按预期工作,return 0;
将被令牌化为return
和0;
)