C ++错误:从'char'到'const char *'的无效转换[-fpermissive]

时间:2018-02-13 04:09:59

标签: c++ string

#include <iostream>
#include <string>
using namespace std;
float findSimilarityScore(string A, string B)
{
    string C;
    if (A.length() != B.length())
    {
        return -1;
    }
    if (A.length() == 0 and B.length() == 0)
    {
       return -1;
    }
    else
    {
        int i;
        for (i = 0; A.length() - 1; i = i+1)
        {
            if (A[i] == B[i])
            {
                C.append(A[i]);
            }
            if (A[i] != B[i])
            {
                return 0;
            }

        }
    cout << C << endl;
    }
}

int main()
{
    findSimilarityScore("DDS","DAS");
}

当我尝试运行我的代码时,我的IDE会显示:

/home/ubuntu/workspace/hmwk4/hmwk4-1.cpp: In function ‘float findSimilarityScore(std::string, std::string)’:
/home/ubuntu/workspace/hmwk4/hmwk4-1.cpp:24:30: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]

为什么呢? 我想:如果A中的第一个字符与B中的第一个字符相同,则将此字符添加到字符串C.如果A中的第二个字符与B中的第二个字符相同,则将此字符添加到字符串C 。 等等。

2 个答案:

答案 0 :(得分:2)

在第

C.append(A[i]);

std::string::append没有超载需要一个char。请改用push_back

C.push_back(A[i]);

这将修复您的编译错误,但您的功能在逻辑上仍然不正确。它在第一次找到两个字符串之间不匹配的字符时返回0,如果两个字符串相同,则它将通过到达非void函数的末尾来调用未定义的行为返回一个值。

答案 1 :(得分:1)

带有单个参数的

string::append()期待一个字符串参数,您传递的是一个char。尝试

C.append(1, A[i]);

此外,一旦找到不匹配的字符,就会返回而不打印新字符串。在cout

之前移动return
if (A[i] != B[i])
{
    cout << C << endl;
    return 0;
}

如果找不到任何不相等的字符,请务必在函数末尾添加一个返回值。