Top.Mail.Ru
Ответы

Программа на 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; цифру перепутал