【问题标题】:C/C++ strcmp cannot convert argument 1 from 'char' to 'const char *'C/C++ strcmp 无法将参数 1 从 'char' 转换为 'const char *'
【发布时间】:2015-05-02 15:28:03
【问题描述】:

所以我传递了一个包含几个单词的 char Array(En),并且我正在尝试按字母顺序排序。不幸的是,我的编译器因“ int strcmp(const char *,const char *)' 爆炸:无法将参数 1 从 'char' 转换为 'const char *”,我有点卡住了!

void TDihotTable::Set(char *En){
    int i, j;
    bool sorted = false;
    char* pTemp = NULL;
    while (!sorted)
    {
        sorted = true;
        for (size_t i = 0; i < 6 - 1; ++i)
        {
            if (!strcmp(En[i], En[i + 1]) > 0)
            {
                sorted = false;
                pTemp = En[i];
                En[i] = En[i + 1];
                En[i + 1] = pTemp;
            }
        }
    }
}

【问题讨论】:

  • C 还是 C++?选择一个。
  • 我发现我错了,谢谢!

标签: c++ c sorting strcmp


【解决方案1】:

你的函数应该看起来更像:

void TDihotTable::Set(char **En){
                           ^^

这将是一个指向字符串的指针数组,您可以像在中所做的那样使用 strcmp

       if (!strcmp(En[i], En[i + 1]) > 0)
           ^

这在标记上也很容易出错。 使用

       if (strcmp(En[i], En[i + 1]) > 0)

此时您尝试比较单个字符。

【讨论】:

    【解决方案2】:

    strcmp() 期望它的参数是 const char *,但在您的代码中,En[i] 和 En[i+1] 的类型是 char。

    • 如果您想比较 chars,请使用 == 运算符。
    • 如果要比较字符串,请使用&amp;En[i] 和&amp;En[i+1] 传递地址

    也就是说,

     if (!strcmp(En[i], En[i + 1]) > 0)
    

    错了。请验证您的逻辑。

    【讨论】:

      【解决方案3】:

      使用En[i] != En[i + 1] 比较字符。 strcmp 接受 char * 参数,但 En[i] 和 En[i + 1] 是 char。

      【讨论】:

        【解决方案4】:

        strcmp() 需要字符串作为比较参数,而不是字符。所以,而不是这一行:

         if (!strcmp(En[i], En[i + 1]) > 0)
        

        您可以根据自己的要求将两个字符直接比较为if(En[i]==En[i+1]) 或if(En[i]!=En[i+1])。

        【讨论】:

          【解决方案5】:

          单词数组应该是一个二维字符数组:char **En。比较应该会起作用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-11
            • 1970-01-01
            • 2014-03-02
            相关资源
            最近更新 更多