Witam mam oto taki program gdzie podstawą jest program dostarczony przez wykładowce a moim zadaniem jest napisanie dwóch funkcji unsigned toString(unsigned n, unsigned p, char* code) oraz bool isPalindrom(char* s, unsigned k)
Kod programu :
#include <iostream>
#include <string>
using namespace std;
unsigned toString(unsigned n, unsigned p, char* code);
bool isPalindrom(char* s, unsigned k);
int main()
{
unsigned m, n, p; // zakres liczb m..n; p: podstawa zapisu
unsigned k; // liczba cyfr w zapisie przy podstawie p
char code[33] = { 0 };// Co najwyżej 32 cyfry rozwinięcia unsigned
setlocale(LC_ALL, "pl-PL.UTF8");
cout << "Program sprawdza, które liczby całkowite > 0 z zakresu m..n \n";
cout << "są w zapisie przy podstawie p palindromami. \n";
cout << "Liczby na wejściu podawane są w zapisie dziesiętnym. \n";
cout << "m, n <= 0 --> koniec programu.\n";
cout << "Uwaga: podstawa p musi być ze zbioru {2 .. 36}. \n";
while (true) { // Konwersacja
cout << "\nzakres m..n i podstawa p: m n p = ";
cin >> m >> n >> p;
if (m <= 0 || n <= 0) break;
for (unsigned i = m; i <= n; ++i) {
k = toString(i, p, code);
if (isPalindrom(code, k))
cout << i << " = " << code << endl;
}
}
cout << "\nKoniec programu\n";
}
// Zwraca true jeśli liczba k-cyfrowa w s jest palindromem.
bool isPalindrom(char* s, unsigned k)
{
std::string num_str(s);
std::string num_reversed = std::string(num_str.rbegin(), num_str.rend());
return num_str == num_reversed;
}
// Konwersja liczby dodatniej n na postać znakową
// w zapisie przy podstawie p do tablicy code.
// Funkcja zwraca liczbę znaków rozwinięcia przy podstawie p.
// Uwaga: w zależności od p: cyfry ze zbioru {0..9, A..Z}.
unsigned toString(unsigned n, unsigned p, char* code)
{
const string signs{ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U' };
if (n<2 || p>static_cast<int>(signs.size()) - 1) return {};
string result;
do
{
result += signs[n % p];
n /= p;
} while (p > 0);
reverse (begin(result), end(result));
return result;
}
W funkcji unsigned toString(unsigned n, unsigned p, char* code) mam dokonać konwersji inta na string o podstawie p < gdzie jak dobrze rozumie p jest system zapisu licz. Niestety program się nie kompiluje z powodu
linia 72
Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
Ostrzeżenie C4018 ">": niezgodność typu ze znakiem/bez znaku Project1 C:\Users\nimda\source\repos\Project1\Źródło.cpp 72
Linia 85
Ważność Kod Opis Projekt Plik Wiersz Stan pominięcia
Błąd C2440 "return": nie można konwertować z "std::string" na "unsigned int" Project1 C:\Users\nimda\source\repos\Project1\Źródło.cpp 85
Jak mam poprawić tą funkcje