Неожиданное предупреждение (-Wreturn-тип) генерируется - PullRequest
0 голосов
/ 15 апреля 2020

Насколько я знаю, я написал код, представляющий решение этой проблемы: https://www.hackerrank.com/challenges/make-it-anagram-mglines/problem

Мой код:


#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int convert(char alphabet) 
{
    for (int i = 1; i<=26;i++)
    {
        if ("abcdefghijklmnopqrstuvwxyz"[i-1] == alphabet)
            return i;
    }
}

int main() 
{
    string a,b;
    getline(cin, a);
    getline(cin, b);
    int l1 = a.length();
    int l2 = b.length();
    int l3 = max(l1,l2);
    int i, ans;
    ans = 0;
    int count1[26],count2[26];
    for (i=1;i<=l1;i++)
        count1[convert(a[i-1])-1]++;
    for (i=1;i<=l2;i++)
        count2[convert(b[i-1])-1]++;
    for (i=1;i<=26;i++)
        ans+= count1[i-1]+count2[i-1]-2*(min(count1[i-1],count2[i-1]));
    cout << ans << endl;
    return 0;
}

Понятия не имею почему я получаю это предупреждение при попытке запустить:

test.cpp:14:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
1 warning generated.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 15 апреля 2020

Поскольку функция

int convert(char alphabet) 
{
    for (int i = 1; i<=26;i++)
    {
        if ("abcdefghijklmnopqrstuvwxyz"[i-1] == alphabet)
            return i;
    }
}

возвращает значение только при некоторых условиях. Что, если это условие не выполняется?!

Вы можете использовать что-то вроде std::optional<int>, чтобы преодолеть это, но я думаю, что ваша функция должна возвращать правильное значение, а логика c неверна.

Если вы уверены, что условие будет выполнено, вы можете использовать следующее

int convert(char alphabet) 
{
    for (int i = 1; i<=26;i++)
    {
        if ("abcdefghijklmnopqrstuvwxyz"[i-1] == alphabet)
            return i;
    }
    throw std::logic_error("not matched");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...