比较c ++中的字符串

时间:2013-02-05 19:48:20

标签: c++

我是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:{。

2 个答案:

答案 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}})