假设我有char[10]="1234567890
。我希望它在两个5位数中打破它。我想问两件事,我需要在拆分之前将其转换为int,我将如何拆分
答案 0 :(得分:1)
离
char num10[]="1234567890";
int n1, n2;
sscanf(num10, "%5d%5d", &n1, &n2);
printf("%d, %d\n", n1, n2);
答案 1 :(得分:0)
首先请注意,您应该编写char arr[11]="1234567890"
,或者更好,char arr[]="1234567890"
,因为您需要为包含字符串文字的空终止符提供空间。如果你不提供,编译器会计算出正确的大小。
但是有一种实现你想要的数字方式,这比使用字符串更有效。
以数字开头或将字符串转换为uint64_t
,调用该数字x。您需要64位整数,因为对于32位整数,大约10位数字太大。
计算x / 100000.这是更重要的部分。
计算x%100000。这是最不重要的部分。
答案 2 :(得分:0)
如果你的问题有char arr[10] = "1234567890"
,请注意它不是字符串,因为它没有空间容纳NUL终结符(需要大小11
,或者留空[]
让编译器为你计数)。假设您需要两个字符串,则需要将两个半部分复制到单独的数组中,例如:
char topHalf[6], bottomHalf[6]; // 6 = 5 + NUL
(void) memcpy(topHalf, arr, 5); // copy 5 chars from beginning of arr
(void) memcpy(bottomHalf, arr + 5, 5); // arr + 5 to skip the 5 in topHalf
topHalf[5] = '\0'; // terminate string
bottomHalf[5] = '\0'; // "
答案 3 :(得分:-2)
你的意思是以下内容吗?
#include <stdio.h>
int main( void )
{
char number[10] = "1234567890";
const size_t N = sizeof( number ) / sizeof( *number );
int num1 = 0, num2 = 0;
int *p = &num1;
for ( size_t i = 0; i < N; i++ )
{
if ( i == ( N + 1 ) / 2 ) p = &num2;
*p = *p * 10 + number[i] - '0';
}
printf( "num1 = %d, num2 = %d\n", num1, num2 );
}
程序输出
num1 = 12345, num2 = 67890