【问题标题】:how to break 10 digit number into two 5 digit number in c?如何在c中将10位数字分成两个5位数字?
【发布时间】:2015-10-26 16:38:32
【问题描述】:

假设我有一个char[10]="1234567890。我希望它把它分成两个 5 位数的数字。我想问两件事,我需要在拆分之前将其转换为 int 以及如何拆分它

【问题讨论】:

  • 使用数组索引和 memcpy(),然后,如果需要,可以使用 strtol()。
  • 取决于您在输出中的需要。如果您需要它作为string,则无需转换为int
  • @haris int 或 string 都对我有好处
  • @user3668172:那么最好的方法就是 Sourav 提到的,将输出保持为 string 格式

标签: c split numbers


【解决方案1】:

首先请注意,您应该写char arr[11]="1234567890",或者更好的是char arr[]="1234567890",因为您需要为包含字符串文字的空终止符提供空间。如果您不提供,编译器会计算出正确的大小。

但是有一种数字方式可以实现你想要的,这将比使用字符串更有效。

  1. 要么以数字开头,要么将字符串转换为 uint64_t,称之为 x。您需要一个 64 位整数,因为某些 10 位数字对于 32 位整数来说太大了。

  2. 计算 x / 100000。这是更重要的部分。

  3. 计算 x % 100000。这是最不重要的部分。

【讨论】:

    【解决方案2】:

    如果根据您的问题有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';                   // "
    

    【讨论】:

    • 所以在这个上半部分和下半部分将有 5 个 5 位数字
    • @user3668172 topHalf 和 bottomHalf 分别是 1 个长度为 5 的字符串,在这种情况下,字符串的内容恰好是 5 位数。
    • 为什么投反对票?它与给定的 OP 输入一起工作(不修复丢失的终止符),并且它可能比替代方法更快 如果字符串是所需的输出。
    • 因为给“gimme ze codez”这类问题的代码是不好的。 SO 是关于提供钓鱼竿,而不是鱼。
    • @qrdl 问题本身可能很糟糕,但这并不意味着答案是。我花在回答不好问题上的时间都是浪费的,我希望提问者在这个过程中学到的东西超出了他们的预期(例如,他们的字符数组中缺少终结符)。
    【解决方案3】:

    你的意思是以下吗?

    #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
    

    【讨论】:

      【解决方案4】:

      前

      char num10[]="1234567890";
      int n1, n2;
      sscanf(num10, "%5d%5d", &n1, &n2);
      printf("%d, %d\n", n1, n2);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多