可能重复:
比较两个C风格字符串的正确功能是什么?
我的比赛条件不起作用!有人可以建议如何比较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;
Run Code Online (Sandbox Code Playgroud)
尽管temp
和data
比赛,以下条件不工作:
if (stpr==data) {
isData = true;
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否有帮助.该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();
}
}
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 18
由于这两个stpr
和data
是C字符串,您需要使用strcmp()
:
#include <string.h>
...
if (strcmp(stpr, data) == 0) {
// strings are equal
...
} else {
// strings are NOT equal
}
Run Code Online (Sandbox Code Playgroud)
这种情况不会起作用,因为==
操作员没有超载char*
.
if(stpr==data)
{
isData = true;
}
Run Code Online (Sandbox Code Playgroud)
请改用它.
if (strcmp(stpr, data) == 0)
{
isData = true ;
}
Run Code Online (Sandbox Code Playgroud)
strcmp()
0
如果两个cstrings相等则返回.确保您匹配的两个cstrings都拥有一些合法的内存,并在最后终止.
编辑:
为了避免任何麻烦和错误,建议不要使用raw char*
和use std::string
.所以最好让它们成为字符串并进行比较.
std::string data ; //passed or declared as string
std::string stpr ;
.....
//Do some work.
if (stpr == data)
//do work here
Run Code Online (Sandbox Code Playgroud)
这种方法可以为您节省很多麻烦.