可能性のある複製:
2つの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;
_
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();
}
}
_
stpr
とdata
はどちらもC文字列なので、 strcmp()
を使用する必要があります。
#include <string.h>
...
if (strcmp(stpr, data) == 0) {
// strings are equal
...
} else {
// strings are NOT equal
}
_==
_演算子は_char*
_に対してオーバーロードされないため、この条件は機能しません。
_if(stpr==data)
{
isData = true;
}
_
代わりにこれを使用してください。
_if (strcmp(stpr, data) == 0)
{
isData = true ;
}
_
strcmp()
は、両方のcstringが等しい場合に_0
_を返します。一致する両方のcstringが正当なメモリを保持し、最後にnullで終了していることを確認してください。
編集:
なんらかの面倒やバグを回避するために、生の_char*
_を使用せず、代わりに_std::string
_を使用することをお勧めします。そのため、それらを文字列にして比較します。
_std::string data ; //passed or declared as string
std::string stpr ;
.....
//Do some work.
if (stpr == data)
//do work here
_
このアプローチにより、多くのトラブルを回避できます。
2つのchar *を比較しようとしています。状況を確認するためにstrcmp(stpr, data)
を使用してみることができます。
次のように使用する
if(strcmp(stpr, data)==0){..}