比较两个 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;
即使temp
和data
匹配,以下条件不起作用:
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】:由于stpr
和data
都是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* 是不是相等[重复]的主要内容,如果未能解决你的问题,请参考以下文章