Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
Доброго времени суток, господа, прошу откликнуться и помочь! Написал парочку функций для перевода Int в Char и наоборот и написал программу для теста:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
#include <stdio.h>
#define INT_MIN -2147483648
#define INT_MAX 2147483647
int Char2Int(char string[]) {
bool negative = false;
int outputValue = 0;
int stringLength = 0;
while (string[stringLength] != '\0') { // count the number of characters in the string
stringLength++;
}
for (int i = 0; i < stringLength; i++) {
if (string[i] == '-') {
negative = true; // remember that the input string is negative
} else if (string[i] >= '0' && string[i] <= '9') {
outputValue = outputValue * 10 + (string[i] - '0'); // convert the character to an integer and add it to the output value
} else {
return 0; // return 0 if the input string is invalid
}
}
if (negative) {
outputValue *= -1; // make the output value negative if necessary
}
return outputValue;
}
char* Int2Char(int inputNumber) {
static char resultString[32]; // define the character array as a static local variable
// Check that the input integer is within a valid range
if (inputNumber < INT_MIN || inputNumber > INT_MAX) {
return ""; // return an empty string if the input is out of range
}
// Handle the special case where the input integer is 0
if (inputNumber == 0) {
resultString[0] = '0';
resultString[1] = '\0';
return resultString;
}
// Convert the integer to a string
int absoluteInputNumber;
if (inputNumber < 0) {
absoluteInputNumber = inputNumber * -1; // take the absolute value of inputNumber
resultString[0] = '-'; // add a minus sign to the beginning of the string
} else {
absoluteInputNumber = inputNumber;
}
int digit, reversedNumber = 0, resultIndex = 0;
while (absoluteInputNumber > 0) {
digit = absoluteInputNumber % 10;
reversedNumber = reversedNumber * 10 + digit;
absoluteInputNumber = absoluteInputNumber / 10;
}
while (reversedNumber > 0) {
resultString[resultIndex + 1] = (reversedNumber % 10) + '0'; // start at resultIndex + 1 to skip the minus sign
resultIndex++;
reversedNumber = reversedNumber / 10;
}
resultString[resultIndex + 1] = '\0'; // add a null terminator to the end of the string
return resultString; // return a pointer to the character array
}
int main() {
int inputNumber = 12345;
printf("Integer: %d\n", inputNumber);
printf("String: %s\n", Int2Char(inputNumber));
int outputNumber = Char2Int(Int2Char(inputNumber)); // convert the string back to an integer
printf("Output: %d\n", outputNumber);
return 0;
}
Ожидаю вывод:
Integer: 12345
String: 12345
Output: 12345
Получаю:
Integer: 12345
String:
Output: 0
Знатоки, в чем может быть проблема?
По дате
По рейтингу
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
#include <stdio.h>
#define INT_MIN -2147483648
#define INT_MAX 2147483647
int Char2Int(char string[]) {
bool negative = false;
int outputValue = 0;
int stringLength = 0;
// skip leading whitespace characters
while (string[stringLength] == ' ') {
stringLength++;
}
for (int i = stringLength; string[i] != '\0'; i++) {
if (string[i] == '-') {
negative = true;
} else if (string[i] >= '0' && string[i] <= '9') {
// check for overflow
if (outputValue > INT_MAX/10) {
return 0;
}
outputValue = outputValue * 10 + (string[i] - '0');
} else {
return 0;
}
}
// check for negative overflow
if (negative && outputValue == INT_MIN) {
return 0;
}
if (negative) {
outputValue *= -1;
}
return outputValue;
}
char* Int2Char(int inputNumber) {
static char resultString[32];
// check for out-of-range input
if (inputNumber < INT_MIN || inputNumber > INT_MAX) {
return "";
}
// handle the special case of input integer 0
if (inputNumber == 0) {
resultString[0] = '0';
resultString[1] = '\0';
return resultString;
}
int absoluteInputNumber;
int resultIndex = 0;
if (inputNumber < 0) {
absoluteInputNumber = inputNumber * -1;
resultString[resultIndex++] = '-';
} else {
absoluteInputNumber = inputNumber;
}
// convert the integer to a string
while (absoluteInputNumber > 0) {
resultString[resultIndex++] = (absoluteInputNumber % 10) + '0';
absoluteInputNumber /= 10;
}
resultString[resultIndex] = '\0';
// reverse the result string
for (int i = 0; i < resultIndex / 2; i++) {
char temp = resultString[i];
resultString[i] = resultString[resultIndex - i - 1];
resultString[resultIndex - i - 1] = temp;
}
return resultString;
}
int main() {
int inputNumber = 12345;
printf("Integer: %d\n", inputNumber);
printf("String: %s\n", Int2Char(inputNumber));
int outputNumber = Char2Int(Int2Char(inputNumber));
printf("Output: %d\n", outputNumber);
return 0;
}
123456789101112131415161718192021222324
char* Int2Char(int inputNumber)
{
static char resultString[17]{'0'}; // define the character array as a static local variable
char reverse[17]{}; //reverse buffer
// Convert the integer to a string
int it = 0, rev_it = 0; //forvard and revers iterator
if (inputNumber < 0) //add negative as needed
{
resultString[it++] = '-'; inputNumber = -inputNumber;
}
while (inputNumber)
{
reverse[rev_it++] = '0' + inputNumber % 10;
inputNumber /= 10;
}
while (rev_it) //copy from reverse to string
{
resultString[it++] = reverse[--rev_it];
}
return resultString; // return a pointer to the character array
}
в resultString[0] ничего не пишется, и там остаётся лежать 0
reversedNumber / 10; цифру перепутал