【问题标题】:String Conversion error字符串转换错误
【发布时间】:2014-02-27 16:00:17
【问题描述】:

我创建了一个字符串结构,每次我尝试比较我的字符串时,它都说我在比较整数和字符……但我只是在比较字符串?

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++ 下的内置功能,请参阅 std::sort。

标签: c++ string compiler-construction


【解决方案1】:

std::string 有一个operator&gt;,使用它:

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

【讨论】:

  • 如果我声明了 #include 和 #include 并使用命名空间 std;为什么我必须使用 c_str 和 std:string?
  • 您不必使用std::string,您只需使用。而且因为您已经这样做了,所以您必须使用 c_str() 才能将 std::string 与采用 const char*s 的函数一起使用。
  • 在 STL 字符串上使用 strcmp() 是 hackish,恕我直言。
【解决方案2】:

您将 C++ (STL) std::strings 视为老式 C 字符串。忘记所有关于 C 字符串的内容,只使用 C++ 字符串。

如果您需要比较它们,它们有一个内置的compare method。如果你需要玩机箱等,我强烈推荐Boost String Algorithms。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2021-06-25
    • 2015-02-26
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多