我正在进行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;
}
以下是调试器显示的内容:
如果条件返回false,则两者都是。
请提出可能存在的问题。
答案 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";