我从char转换为const char错误无效。如何修复此程序?

时间:2017-07-01 13:16:22

标签: c++ c++11

我在几行中得到了这个错误,并且不知道这个程序是如何工作的。 Beginer程序员在这里。任何帮助将不胜感激。

#include <iostream>
#include <cstring>

using namespace std;

char* find_greater(char* a, char b)
{
    char* result;
    if (strcmp(a, b) > 0) 
        result = a;  
    else
        result = b;
    return result;
}

int main()
{
    char str1[10], str2[10];
    str1[] = "zebra";
    str2[] = "man";
    cout << "Greater string is :" << find_greater(str1, str2) << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:0)

看,那应该是那样的  您在函数参数中忘记了*,它应该是char* b

    #include<iostream>
    #include<cstring>
    char* find_greater(char* a, char* b)    
    {
        if (strlen(a) > strlen(b))   //check length array
            return a;                // return array 
        return b;
    }
    int main()
    {
        char str1[] = "zebra";
        char str2[] = "man";
        std::cout << "Greater string is :" << find_greater(str1, str2) << endl;
        return 0;
    }

您之前添加到标签的C ++中的第二种可能性

#include<iostream>
#include <vector>
std::vector<char> find_greater(std::vector<char> a, std::vector<char> b)
{
    if (a.size() > b.size())
        return a;
    return b;
}
int main()
{
    std::vector<char> vec1{ 'w','w','w','w','w','w','w','w' };
    std::vector<char> vec2{ 'w','w' };
    std::cout << "Greater string is :";
    for (const auto& itr : find_greater(vec1, vec2))
        std::cout << itr;
    std::cout << std::endl;
    return 0;
}

和第三种解决方案(在c ++中可能是最好的)

#include <iostream>
#include <string>
std::string find_greater(const std::string& a, const std::string& b)
{
    if (a.size() > b.size())
        return a;
    return b;
}
int main()
{
    std::string str1{ "Monkey" };
    std::string str2{ "Horse" };
    std::cout << "Greater string is : " << find_greater(str1, str2) << std::endl;
    return 0;
}

答案 1 :(得分:0)

Two problems

  1. 愚蠢的错字:

    char* find_greater(char* a, char* b)
    //                              ^
    

    更加关注您正在做的事情,并阅读您的代码。

  2. 此处解析错误:

    char str1[10], str2[10];
    str1[] = "zebra";
    str2[] = "man";
    

    你不能将字符串文字分配给这样的数组,即使你可以,str1[]也不是。作为特殊情况,您可以初始化),所以这样做:

    char str1[10] = "zebra", str2[10] = "man";
    
  3. 修复那些,the code compiles and runs(尽管如其他答案中所探讨的那样,这实际上并不是最好的方法)。