比较两个 char* 是不是相等[重复]

Posted

技术标签:

【中文标题】比较两个 char* 是不是相等[重复]【英文标题】:Comparing two char* for equality [duplicate]比较两个 char* 是否相等[重复] 【发布时间】:2012-11-25 07:56:12 【问题描述】:

可能重复:What is the proper function for comparing two C-style strings?

我的匹配条件不起作用!有人可以建议如何与 C 风格的字符串进行比较吗?

void saveData(string line, char* data)
    char *testString = new char[800];
    char *stpr;
    int i=0;
    bool isData=false;
    char *com = data;
    strcpy(testString,line.c_str());
        stpr = strtok(testString, ",");
        while (stpr != NULL) 
            string temp = stpr;
            cout << temp << " ===== " << data << endl;

即使tempdata 匹配,以下条件不起作用:

if (stpr==data) 
  isData = true; 

不确定这是否有帮助。从下面的函数调用SaveData() 函数:

void readFile(char* str)
    string c="", line, fileName="result.txt", data(str);
        ifstream inFile;
    inFile.open(fileName.c_str());
    resultlist.clear();

    if(inFile.good())    
        while(!inFile.eof())
            getline(inFile, line);
            if(line.find(data)!=string::npos)
                cout << line << endl;
            
            saveData(line, str);
        
        inFile.close();
    


【问题讨论】:

对不起,是我的错。它正在比较 2 char* 【参考方案1】:

由于stprdata都是C字符串,所以需要使用strcmp()

#include <string.h>
...
if (strcmp(stpr, data) == 0) 
    // strings are equal
    ...
 else 
    // strings are NOT equal

【讨论】:

很遗憾,我仍然无法输入条件。 @NPE C++ 标头 'string.h' 已弃用。考虑改用'cstring'【参考方案2】:

此条件不起作用,因为 == 运算符没有为 char* 重载。

if(stpr==data)
 
  isData = true; 

改用这个。

if (strcmp(stpr, data) == 0)

  isData = true ;

strcmp() 返回 0 如果两个 cstring 相等。确保您匹配的两个 cstrings 都拥有一些合法的内存并且在最后以 null 终止。

编辑:

为避免任何麻烦和错误,建议不要使用原始char* 而是使用std::string。所以最好让它们成为字符串并进行比较。

std::string data ;   //passed or declared as string
std::string stpr ;
.....
//Do some work.

if (stpr == data)
   //do work here

这种方法可以省去很多麻烦。

【讨论】:

0 == strcmp 看起来比 !strcmp 恕我直言更明确 是的,你是对的。旧的做法很少消失。 :) 嗨@Coding Mash,即使2个字符相同,我仍然无法输入条件。类型或 stm 是否与此错误有关? 两个 cstrings 是否都分配了一些内存并以 null 结尾? @CodingMash 你可以看到我可以在比较之前计算出临时和数据【参考方案3】:

您正在尝试比较两个 char*。您可以尝试使用strcmp(stpr, data) 来检查条件。

最好像这样使用它

 if(strcmp(stpr, data)==0)..

【讨论】:

以上是关于比较两个 char* 是不是相等[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何判断字符串是不是相等

C++中判断两个字符串是不是相等,怎么判断

java比较两字符串是不是相等。。。

strcmp(a,b),比较时是不是要求两个字符串的长度相等??

java中string能比较大小吗

比较文本文件是不是相等[重复]