C ++字符串匹配返回错误

时间:2015-06-05 19:25:57

标签: c++ visual-c++

我正在进行C ++任务。我遇到字符串比较问题。

我使用==操作比较两个明显相同的字符串,但条件返回false。调试器还显示两个字符串(存储在不同的变量中)是相同的。我一定错过了什么。

这是我的代码:

void classCounter() {

    ifstream fread;
    string linetxt;
    char *records[50];
    char myLine[100];
    char delims[] = "|";
    int btotal=0,etotal=0,total=0;

    fread.open("F:\\myfile.txt");

    while(!fread.eof()) {

        getline(fread,linetxt,'\n');

        int i = 0;
        strcpy(myLine, linetxt.c_str());
        records[i] = strtok( myLine, delims );

        while( records[i] != NULL  ) 
        {
            cout << records[i] << "|";

            char *bu = "Business";

            if(records[i] == bu) {
                btotal++;

            }
            if(records[i] == "Economy") {
                etotal++;

            }

            //printf("%d '%s'\n", i, records[i]);
            records[++i] = strtok( NULL, delims );
            break;
        }

        total++;
    }

    cout << "Total number of booked Business seats: " << btotal << endl;
    cout << "Total number of booked Economy seats: " << etotal << endl;

    cout << "Total number of booked seats: " << total << endl << endl;

}

以下是调试器显示的内容:

enter image description here

如果条件返回false,则两者都是。

请提出可能存在的问题。

4 个答案:

答案 0 :(得分:4)

您正在比较两个指针,它们将永远不会相同。要么注意使用std::string的建议(我也推荐),要么使用strcmp来比较字符串。

答案 1 :(得分:2)

        if(records[i] == bu) {

        if(records[i] == "Economy") {

比较两个char*,而不是字符串。

您可以使用std::string或使用函数strcmp将它们作为字符串进行比较。

选项1:使用std::string

std::string records[50];

有了这个改变,

        if(records[i] == bu) {

        if(records[i] == "Economy") {

应该有用。

选项2:使用strcmp

        if( strcmp(records[i], bu) == 0) {

        if( strcmp(records[i], "Economy") == 0) {

答案 2 :(得分:0)

你的调试器告诉你你需要知道什么..你使用char *代替String,所以你的char *是指针。您的程序正在比较两个指针0x00c93bc0 != 0x002af824

将来使用strcmp来避免此问题

答案 3 :(得分:0)

所以我假设您的输入文件类似于:

Business|Economy|Economy|Economy|Business
Economy|Economy|Economy|Business|Economy

......等等。正确?你是否正在试图计算每种票的销售量?

如果是这样,我会以不同的方式编写代码。我可能会这样做:

std::map<std::string, int> tickets;

std::string name;
std::ifstream in("f:/myfile.txt");

int total = 0;

while (std::getline(in, name, '|')) {
   ++tickets[name];
   ++total;
}

for (auto t : tickets)
    std::cout << "Total number of booked " << t.first << " seats is: " << t.second "\n";
std::cout << "Total number of booked tickets: " << total << "\n";