2015-10-04 35 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

相关问题