2015-10-04 84 views
3

我正在嘗試自學C語言。我試圖將整數分成多個獨立的整數,例如12345分爲12,34和5,但我無法找到一種方法來做到這一點。如何在C中將整數分隔爲多個獨立的整數?

我已經知道一些Java和編程基礎知識。我需要使用某種do-while或for循環來做到這一點,或者我可以使用一個整數數組嗎?

+0

'的sprintf( )「它? C實際上並不具備你想要的那種功能,它對於十進制數沒有特殊的功能。 – EOF

+0

我認爲你的意思是「分裂」,而不是「拼接」 - 他們是相反的行動。 – clearlight

+0

你想在什麼標準上拆分數字?它是基於數學的,基於位置的,還是有其他方式決定分割數字?你在尋找一個通用的解決方案來分割任何給定的數字或只是12345?是否有一種偏好,你是否用算術或字符串解析操作來處理它? – clearlight

回答

1

否則,首先,爲int轉換爲字符串:

#include <stdio.h> 
int n = 12345678; 
int len = snprintf(NULL, NULL, "%d", n); 
char *digits = malloc(len); 
sprintf(digits, "%d", n); 

然後,你可以分割字符串了各種方法,如:

int a, b, c; 
sscanf(digits, "%2d%2d%4d", &a, &b, &c); 

或者:

char sa[2], sb[2], sc[4]; 
char *cp = digits; 
sa[0] = *cp++; 
sa[1] = *cp++; 
sb[0] = *cp++; 
sb[1] = *cp++; 
sc[0] = *cp++; 
sc[1] = *cp++; 
sc[2] = *cp++; 
sc[3] = *cp++; 

printf("%2c %2c %4c\n", sa, sb, sc); 

或者:

// Create 3 buffers to hold null-terminated ('\0' terminated) strings 
char sa[3] = { 0 } , sb[3] = { 0 }, sc[4] = { 0 }; 

char *cp = digits; 
sa[0] = *cp++; 
sa[1] = *cp++; 
sb[0] = *cp++; 
sb[1] = *cp++; 
sc[0] = *cp++; 
sc[1] = *cp++; 
sc[2] = *cp++; 
sc[3] = *cp++; 

printf("%s %s %s\n", sa, sb, sc); 

然後自由你的記憶:

free(digits); 

等... 等等...... 等等......

1

既然你想在一個2-2-4形狀分割一個八位數字你可以使用整數除法和模數。
假設你不希望如果有負號:

void split(int input, int output[3]) 
{ 
    if (input<0) 
    input = -input; 
    output[0] = input % 10000; 
    output[1] = (input/10000) % 100; 
    output[2] = input/1000000; 
} 
+0

這樣的工作是否也會如此? - 'int main(void) { int a,m,d,y; printf(「請輸入一個整數值:」); 的scanf( 「%d」,&a); \t 米= A/1000000; \t d =(AM)/ 10000; \t Y =(ADM); \t的printf(「日期是%d /% d /%d \ n「,m,d,y); }' –

+0

你說它是位置的在評論中,而不是算術對於位置的東西,因爲只有一種情況,算術很奇怪。要清楚明確,因此人們不會浪費時間走錯路,我通常會爲一般情況而解決問題,但由於這只是一個沒有實際價值的教育活動,它並沒有說明爲什麼要分裂在這些邊界上的數字,whe重新獲得數據,或者是否會有其他情況,或者位置和字段大小是否發生變化。有很多方法可以解決這個問題。所有情況都需要提供。 – clearlight

+0

@nerdistcolony對不起。它應該是位置的。這個數學運作得到2-2-4組合。基本上我正在解決隨機練習。在當前的一個,我需要 - 1)提示用戶輸入的整數 2)取在一個整數,它的屬性值給一個變量 3)拆分例如12345678整數分成三個不同的整數12, 34和5678. 4)然後有一些數學計算將它們轉換成mm/dd/yyyy並確定日期對應的日期,但這不是我需要幫助的。 我的問題是,我不知道基本的語法。 –

2

這個動態實現你在找什麼!你可以設置你想要的任何類型的分割。 2-2-4或3-4-5或任何東西。 (你基本上可以從用戶那裏得到了一些字符串,並完成這項任務,並打開臨時字符串轉換成整數,如果你想以後):

#include <stdio.h> 
#include <string.h> 

int main() { 
    int i; //Counter 

    char getStr[100]; 
    int NumberToSplit1, NumberToSplit2, NumberToSplit3; 

    printf("Enter a number: "); 
    scanf("%s", getStr); //get it as a string 
    //or you can use scanf("%[^\n], getStr); 

    printf("How many number splits you want: "); 
    scanf("%d %d %d", &NumberToSplit1, &NumberToSplit2, &NumberToSplit3); 

    printf("\n%d-%d-%d split: \n", NumberToSplit1, NumberToSplit2, NumberToSplit3); 

    for (i = 0; i < NumberToSplit1; i++) { 
     printf("%c", getStr[i]); 
    } 
    printf("\n"); 
    for (i = NumberToSplit1; i < (NumberToSplit1+NumberToSplit2); i++) { 
     printf("%c", getStr[i]); 
    } 
    printf("\n"); 
    for (i = (NumberToSplit1+NumberToSplit2); i < (NumberToSplit1+NumberToSplit2+NumberToSplit3); i++) { 
     printf("%c", getStr[i]); 
    } 

    //If you want to save it in an integer, you can use strcat function to save the temp 2 numbers in a string convert that to integer 

    //or use http://stackoverflow.com/questions/7021725/converting-string-to-integer-c 

    printf("\n"); 
    printf("\n"); 

} 

輸出:

Enter a number: 12345 
How many number splits you want: 2 2 4 

    2-2-4 split: 
    12 
    34 
    5 

Program ended with exit code: 0 
+0

這是正確的! – Gworld

相關問題