开发者

C++ string and char comparaison [duplicate]

This question already has answers he开发者_C百科re: Remove spaces from std::string in C++ (19 answers) Closed 2 years ago.

i have a string "8120, 8120NGE, 8120NG, 8130, 8130NG, 8130NGE".

And i have a char* (0x0012d094 "8130")

I want to see if the "8130" is in. That exact word.

So i am using

  istringstream iss(boards);
  string token;
  AVBOOL foundBool=FALSE;
  while(std::getline(iss, token, ','))
  {
    const char * compareToken = token.c_str();  
    token.compare(board);     // with that : it doesn't work cause "8130" is not    equal   0x0012d094 "8130"
    if(strcmp(compareToken,board)==0) //with that it doesnt work cause 0x0012cef0 " 8130" is not equal 0x0012d094 "8130"
      {
        foundBool=TRUE;
      }
  }

So the question is how do i compare a string with a char * .

Do I need to convert the char into a string and then use string.compare OR Do i need to convert the string into a char and use strcmp? OR Do i need to do something else?

I am kind of lost here.


You can use both.

I prefer use .c_str() method with strcmp() C function because it doesn't create an string object.


how about boards.find( token )

if you need it to not have alphanumeric characters after, just check if there is such

and if so search again from that position

cheers & hth.,


Would using a std::set suit your needs ?

std::set<std::string> boards;
while (std::getline(iss, token, ',')) {
    boards.insert(token);
}
if (boards.find(board) != boards.end()) {
    // we found it
}

Note that this does not take into account whitespace that might be in the tokens.


Your question sounds like you're confused about comparison - you can compare a string and a const char* just fine! Both string::compare(const char*) and strcmp will return 0 when the contained characters are equal:

string one = "pl";
string two = "ex";
const char* too = "plex";

int main()
{
        string three = one + two;
        cout << three.compare(too) << endl;
        cout << strcmp(three.c_str(), too) << endl;
}

will print

0
0

Your actual application problem is that you probably want to split a string by ", ", which you can't do with standard library tools. If you can't generally get rid of the spaces as mentioned in Mazurov's answer you will need a tokenizer that accepts string separators.


I think you need to re-write your code so that it strips whitespace before reading tokens. You can adjust your loop as such:

istringstream iss(boards);
string token;
bool found = false;
while((iss >> std::ws) && std::getline(iss,token,','))
{
    found |= (token == board);
}

The loop can also be optimized to stop when the token is found:

while(!found && (iss >> std::ws) && std::getline(iss,token,','))
{
    found = (token == board);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜