比较c++中的字符串

Comparing Strings in c++

本文关键字:字符串 c++ 比较      更新时间:2023-10-16

我是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,' ')上。

如果您的代码命中nt等,会发生什么情况?它将与您的令牌一起提取,您最终会得到一个字符串,如";n",这与";" 不同

要么更改用于标记文件的逻辑:

std::ifstream fin("m.c");
while (fin >> STRING ){
   STRINGS.push_back(STRING);
}
fin.close();

或者修剪一下你的绳子。


更新:

请记住,只有当您的令牌被空格分隔时,这种令牌化器才会工作(return 0 ;将按预期工作,return 0;将被令牌化为return0;