【问题标题】:String class == operator not working properly字符串类 == 运算符无法正常工作
【发布时间】:2014-03-15 05:39:26
【问题描述】:

我正在尝试将我的字符串缓冲区变量中的数据与 if 语句中的字符串文字进行比较。出于某种原因,它适用于第一种情况,但不适用于第二种或第三种情况,即使输入文件具有正确的格式(也没有空格)。可能是什么问题?

while(getline(input, check)) //calculates size of sections array and rooms array
    {
        count++;
        cout<<check<<endl;
        if(check == "-- building room_number capacity")
        {
            Section1 = true;
            pos[0] = count;

            if(pos[0] != 1)
                return 0;
        }
        else if (check == "-- ID prefix course# sect# #minutes #mtgsperweek #students")
        {
            Section1 = false;
            Section2 = true;
            pos[1] = count;

            if(blanks > 1 || blanksPos != pos[1] - 1)
                return 0;
            else
                blanks = 0;
        }
        else if (check == "-- ID days_constraint start_contraint end_constraint")
        {
            Section2 = false;
            Section3 = true;
            pos[2] = count;

            if(blanks > 1 || blanksPos != pos[2] - 1)
                return 0;
            else
                blanks = 0;
        }
        else if (Section1 && check != "-- building room_number capacity")
        {
            if(check.size() == 0)
            {
                blanks++;
                blanksPos =count; 
            }
            else
                roomsize++;
        }
        else if (Section2 && check != "-- ID prefix course# sect# #minutes #mtgsperweek #students")
        {
            if(check.size() == 0)
            {
                blanks++;
                blanksPos =count; 
            }
            else
                sectionsize++;
        }
        else if (Section3 && check != "-- ID days_constraint start_contraint end_constraint")
        {
            if(check.size() == 0)
            {
                return 0;
            }
            else
                constraintsize++;
        }   
        cout<<"R:" << roomsize << " S:" << sectionsize << " C:" << constraintsize << " blanks :" << blanks<<endl ;
    }

一些输出: 欢迎来到课堂作业计划! 输入输入文件:input.txt

-- building room_number capacity
R:0 S:0 C:0 blanks :0
SAL 210 30
R:1 S:0 C:0 blanks :0
OHE 100 120
R:2 S:0 C:0 blanks :0
OHE 120 50
R:3 S:0 C:0 blanks :0

R:3 S:0 C:0 blanks :1
-- ID pre course# sect# #minutes #meetingsperweek #students
R:4 S:0 C:0 blanks :1
20001 CSCI 101 01 110 2 40
R:5 S:0 C:0 blanks :1
20002 CSCI 101 02 110 2 60
R:6 S:0 C:0 blanks :1
20003 CSCI 101 03 110 2 100
R:7 S:0 C:0 blanks :1
20004 CSCI 103 01 90 2 50
R:8 S:0 C:0 blanks :1
20005 CSCI 103 02 90 2 50
R:9 S:0 C:0 blanks :1
20006 CSCI 103 03 90 2 75
R:10 S:0 C:0 blanks :1
20007 CSCI 104 01 80 2 50
R:11 S:0 C:0 blanks :1
20008 CSCI 104 02 80 2 50
R:12 S:0 C:0 blanks :1
20009 CSCI 109 01 90 1 25
R:13 S:0 C:0 blanks :1
20010 CSCI 109 02 90 1 25
R:14 S:0 C:0 blanks :1
20011 CSCI 109 03 90 1 25
R:15 S:0 C:0 blanks :1
20012 CSCI 109 04 90 1 25
R:16 S:0 C:0 blanks :1

R:16 S:0 C:0 blanks :2
-- ID days_constraint start_contraint end_constraint

如您所见,即使检查输出与测试用例相同的内容,它也没有检测到“-- ID pre course# sect# #minutes #meetingsperweek #students”。有什么想法吗?

【问题讨论】:

  • 我的想法是C++不知道mtgsmeetings的缩写
  • 显示check的声明。
  • 另外,你的第三个if 语句在constraint 更有可能出现的地方有contraint。这就是为什么长而复杂的字符串不是节标记的好选择。

标签: c++ string getline


【解决方案1】:

正如在 cmets 和之前的答案中已经指出的那样,您在代码中的某些文本拼写错误。在比较字符串时,提供完全匹配很重要,否则它将返回假(或 0)。

您只需要仔细比较已写入文件的内容。

例如:

文件内容:

"-- ID pre course# sect# #minutes #meetingsperweek #students"

代码比较:

"-- ID prefix course# sect# #minutes #mtgsperweek #students"

这两个字符串不同,因此比较它们将返回 false(或 0)。

避免此类错误的一个简单措施是(如前所述)在比较时从文件中复制粘贴确切的字符串。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    从文本文件中复制并粘贴该行,以免拼错字词。

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2015-04-25
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      相关资源
      最近更新 更多