2017-08-30 71 views
0

我想問是否有一種方法可以將整數作爲char值添加並創建一個字符串。我已經寫了一些代碼,但檢測添加整數作爲字符在C中創建一個字符串

void binary(int decimal) { 
    int modulus; 
    char bin[9]; 
    while (decimal != 0) { 
    modulus = decimal % 2; 
    sprintf(bin, "%d", modulus); 
    if (modulus == 1) { 
     decimal--; 
    } 
    decimal = decimal/2; 
    } 
    puts(bin); 
} 

只有最後一個數字。如果小數點是10則僅持有1代替0101。我該如何解決它?我正在使用Turbo C++ 3.0。

+1

'sprintf(bin,「%d」,modulus);'你總是從前面寫。 – BLUEPIXY

+0

這不是微不足道的,因爲它會寫入反轉的數字。我發佈了一個答案,但它打印出的二進制字符串顛倒了,所以不好。遞歸或反轉字符串後應解決它。 –

+0

爲了不總是從前面寫入,每次寫入時都增加指針('bin')(但保留對返回字符串的開始的引用)。 –

回答

0

這正是你有輕微的修改和註釋功能。

雖然二進制字符串仍然顛倒過來。

void binary(int decimal) { 
    int modulus; 
    char bin[9]; 
    char temp[2]; // temporary string for sprintf 

    bin[0] = 0;  // initially binary string set to "" (empty string) 

    while (decimal != 0) { 
    modulus = decimal % 2; 

    sprintf(temp, "%d", modulus); // print '1' or '0' to temporary string 
    strcat(bin, temp);    // concatenate temporary string to bin 

    if (modulus == 1) { 
     decimal--; 
    } 
    decimal = decimal/2; 
    } 
    puts(bin); 
} 

有更有效的方式來實現這一點,尤其是makeing使用左移操作符(<<),這樣你可以直接構建二元串,而無需在年底扭轉這種局面的。

+0

謝謝你的回答。我實際上是從遵循評論的建議做出相同的代碼。然而你的代碼證實了我的代碼。謝謝! – UbadahJ

+0

是不是產生了翻轉的數字? –

+0

@ Jean-FrançoisFabre是的,請閱讀答案的第二句。 –

0

當然,您正在打印相同的bin位置,而不是移動您的「光標」。

在字符串上聲明一個指針並在每個sprintf之後遞增它,應該起作用,因爲sprintf只發出1位數字+空終止字符。

char bin[9]; 
char *ptr = bin; 
    while (decimal != 0) { 
    modulus = decimal % 2; 
    sprintf(ptr, "%d", modulus); 
    ptr++; 

生成字符串,但反轉(因爲較低位先被處理)。只需打印它反轉或之後反轉。

int l = strlen(bin); 
for (i=0;i<l;i++) 
{ 
    putc(bin[l-i-1]); 
} 
putc("\n"); 
0

這裏是打印十進制二進制的函數:

void print_binary(int num) 
{ 
    int pos = (sizeof(int) * 8) - 1; 
    printf("%10d: ", num); 

    for (int i = 0; i < (int)(sizeof(int) * 8); i++) { 
     char c = num & (1 << pos) ? '1' : '0'; 
     putchar(c); 
     if (!((i + 1) % 8)) 
      putchar(' '); 
     pos--; 
    } 
    putchar('\n'); 
} 

輸出:

 42: 00000000 00000000 00000000 00101010 
+0

無論如何用整數創建一個字符串?你的答案是我想要的,ir只是我想知道我做錯了什麼 – UbadahJ

相關問題