字符串转换错误

问题描述 投票:0回答:2

我制作了一个字符串结构,每次我尝试比较字符串时,它都说我正在比较整数和字符......但我只是比较字符串?

while(gap > 0){
      passOk=true;
      for(int i =0; i < *total-gap; i++)
         if(strcmp(individualf->firstnames[i] , individualf->firstnames[i+gap])>0){
            exchange(individualf[i], individualf[i+gap]);
            passOk = false;
         }
      if(passOk)
         gap /= 2;
   }  
}

我的编译器错误是:无法将参数“1”的“std::string {aka std::basic_string}”转换为“const char*”到“int strcmp(const char*, const char*)”

      if(strcmp(individualf->firstnames[i] , individualf->firstnames[i+gap])>0){
c++ string
2个回答
2
投票

std::string
有一个
operator>
,使用它:

if (individualf->firstnames[i] > individualf->firstnames[i + gap])
    // stuff

如果由于某种原因你必须使用

strcmp
,那么只需意识到
std::string
不是
const char*
,并使用
std::string::c_str()
来获取指向
string
内存的指针:

if (strcmp(individualf->firstnames[i].c_str(), individualf->firstnames[i + gap].c_str()) > 0)
    // stuff

0
投票

您将 C++ (STL)

std::string
视为老式 C 字符串。忘记所有 C 字符串,只使用 C++ 字符串。

如果您需要比较它们,它们有一个内置的 compare 方法。如果您需要使用大小写等,我强烈推荐Boost String Algorithms

© www.soinside.com 2019 - 2024. All rights reserved.