2016-12-02 122 views
0

任務是將int轉換爲char。這裏是我的轉換將int轉換爲char並反轉

#include <conio.h> 
#include <stdio.h> 

main(void) 
{ 
int number,reserve ; 
scanf_s("%d",&number); 
if (number > 0 || number == 0) 
{ 
    do 
    { 
     reserve = number % 10; 
     printf("%c", reserve + '/0'); 
     number /= 10; 
    } while (number != 0); 
} 
else 
{ 
    number *= -1; 
    printf("-"); 
    do 
    { 
     reserve = number % 10; 
     printf("%c", reserve + '/0'); 
     number /= 10; 
    } while (number != 0); 

} 
_getch(); 
return 0; 
} 

問題代碼,這是打印結果的逆轉我想要的東西。所以我正在尋找一種方法來扭轉它。然而我的代碼是由字符打印字符。可能我只需要將所有字符保存到一些字符串中,但我不確定它是如何做到的。感謝任何幫助。

+0

所以你想存儲這些字符,並以相反的順序打印它們? – hbagdi

+0

是的,你讓我的權利 – andrewand

+0

你有沒有嘗試將它存儲在一個數組中,然後最終以相反的順序打印數組?還是一堆? – hbagdi

回答

1

你試過將它們存儲在一個數組,並打印在背面陣列?

#include <stdio.h> 

int main(void) 
{ 
    int number,reverse,i ; 
    scanf("%d",&number); 
    char string[20]; 
    int index = 0; 
    if (number< 0){ 
     number *= -1; 
     printf("-"); 
    } 
    do 
    { 
     reverse = number % 10; 
     //printf("%c", reverse); 
     string[index++] = reverse; 
     number /= 10; 
    } while (number != 0); 

    for (i = index ; i >= 0 ; i--) 
     printf("%c", string[i]); 
    return 0; 
} 
+0

感謝您爲他做了功課。 –

+0

獲得數以百計的錯誤 – andrewand

+1

andrewand,這對你應該做的事情提供了足夠多的幫助。嘗試並找出小錯誤。我再次更新了答案。 – hbagdi

0

正如您在您的問題中所假設的那樣,您需要存儲字符以反向打印它們。

使用承擔這一任務的陣列很簡單:

// I never know how much memory I need ... 
char reverse[200]; 
int i = 0; 
reverse[i++] = next calculated character 

while (i) { 
    print reverse[--i]; 
} 
0

此方法應該足以將整數轉換爲字符串而不使用任何標準庫函數。

void ReverseString(char *sBuf, int iLength) 
{ 
    char *String1 = NULL; 
    char *String2 = NULL; 

    for (String1 = sBuf, String2 = sBuf + iLength - 1; String2 > String1; ++String1, --String2) 
    { 
     *String1 ^= *String2; 
     *String2 ^= *String1; 
     *String1 ^= *String2; 
    } 
} 

int YourVeryOwn_itoa(int iINValue, char *sOUTValue) 
{ 
    unsigned short writePosition = 0; 

    if (iINValue < 0) 
    { 
     sOUTValue[writePosition++] = '-'; 
    } 

    do 
    { 
     sOUTValue[writePosition++] = (unsigned char)48 + (iINValue % 10); 
    } while ((iINValue /= 10) > 0); 

    sOUTValue[writePosition] = '\0'; 

    ReverseString(sOUTValue, writePosition); 

    return writePosition; 
} 

void main() 
{ 
    char buf[255]; 
    YourVeryOwn_itoa(123456789, buf); 
    printf("%s", buf); 
} 
+0

你想做[xor swap](https://en.wikipedia.org/wiki/XOR_swap_algorithm)嗎?這是一個非常糟糕的主意。 ['void main()'](http://stackoverflow.com/q/204476/995714)也是一個糟糕的主意 –

+0

我之前在這裏做過的移植實際上提到XOR對於所有已知的原因都是一個壞主意我喜歡它,因爲它很快打字)。另外,作爲一個例子void main()是完全可以接受的。 – NTDLS

+0

'void main()'在各種可能的方式中都是錯誤的。 –