C ++字符串和字符比较

时间:2011-07-04 15:55:34

标签: c++ string char

我有一个字符串"8120, 8120NGE, 8120NG, 8130, 8130NG, 8130NGE"

我有char* (0x0012d094 "8130")

我想知道“8130”是否在。确切的说法。

所以我正在使用

  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;
      }
  }

所以问题是如何将字符串与char *进行比较。

我是否需要将char转换为字符串然后使用string.compare 要么 我需要将字符串转换为char并使用strcmp吗? 要么 我还需要做别的吗?

我有点迷失在这里。

6 个答案:

答案 0 :(得分:2)

您可以同时使用两者。

我更喜欢使用带有strcmp()C函数的.c_str()方法,因为它不会创建字符串对象。

答案 1 :(得分:1)

要从字符串中删除空格,请参阅“Remove spaces from std::string in C++”。然后您可以比较代码中的字符串。

答案 2 :(得分:0)

boards.find( token )

怎么样?

如果你需要它后面没有字母数字字符,只需检查是否有这样的

如果是,那么从那个位置再次搜索

欢呼&第h。,

答案 3 :(得分:0)

使用std::set会满足您的需求吗?

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

请注意,这不会考虑令牌中可能存在的空白。

答案 4 :(得分:0)

你的问题听起来像是对比较感到困惑 - 你可以比较stringconst char*就好了!当包含的字符相等时,string::compare(const char*)strcmp都将返回0

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;
}

将打印

0
0

您的实际应用程序问题是您可能希望按", "拆分字符串,这是标准库工具无法做到的。如果您通常无法摆脱Mazurov答案中提到的空格,您将需要一个接受字符串分隔符的标记生成器。

答案 5 :(得分:0)

我认为您需要重新编写代码,以便在读取令牌之前删除空格。你可以这样调整你的循环:

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

循环也可以优化,以便在找到令牌时停止:

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