繁体   English   中英

如何从数字中获取一些数字?

[英]How to grab some digits from a number?

让我们说我们有以下数字。

数量= 2001000200030

如何获取第一个数字并将其存储到变量中? 然后获取接下来的四位数并将其存储到另一个变量中? 然后接下来的四位数...

所以输出应该是这样的。

第一= 2;

前四= 0010

秒四= 0020

thirdfour = 0030

谢谢,感谢您的宝贵时间。

当可以坚持使用数字时,为什么要使用字符串? 您可以使用10的幂和取模和除数。

#include <stdio.h>

int main(void) {
    long long number = 2001000200030LL;

    /* Find power of 10 for top digit */
    long long currentDigit = 1LL;
    while((currentDigit * 10LL) < number) currentDigit *= 10LL;

    printf("First digit = %lld\n", number / currentDigit);
    number %= currentDigit;

    /* Read off groups of four digits */
    while(currentDigit >= 10000LL)
    {
        long long nextFour;
        currentDigit /= 10000LL;
        nextFour = number / currentDigit;
        number %= currentDigit;
        printf("Next four = %04lld\n", nextFour);
    }

    /* Output any remaining digits not covered by a group of four */
    if (currentDigit > 1LL)
    {
        printf("Remaining digits = ");
        for(currentDigit /= 10LL; currentDigit > 1LL; currentDigit /= 10LL)
        {
            printf("%lld", (number / currentDigit) % 10LL);
        }
        printf("%lld\n", number % 10LL);
    }

    return 0;
}

数字以二进制形式存储在计算机上,因此,整数不能区分单个数字。

将数字转换为字符串并提取所需的部分。 如果需要,您还可以将每个部分转换回数字。 (可能有更漂亮的方法来提取字符串的一部分)

同样,该代码也用于此人为的示例,如果整数未知,则此代码无法安全地做出假设。

long long number = 2001000200030LL;

// convert number to string
char string[64];
sprintf(string, "%lld", number);

// access individual digits
string[0] (first digit)
string[1] (second digit)

// copy first four digits into an int
char firstFour[5]
memcpy(firstFour, string, 4)
firstFour[4] = "\0"; // null terminate
int firstFourInt = atoi(firstFour);

// copy second four digits into an int
char secondFour[5]
memcpy(secondFour, string + 4, 4)
secondFour[4] = "\0"; // null terminate
int secondFourInt = atoi(secondFour);
#include <stdio.h>
#include <string.h>
#include <stdint.h>

int main(void){
    int64_t number = 2001000200030LL;
    char data[24];
    char digit[5] ={0}, *p;
    int len, r;
    len=sprintf(data, "%lld", number);
    p = data;
    r = len % 4;
    if(r){
        strncpy(digit, p, r);
        printf("%s\n", digit);
        len -= r;
        p += r;
    }
    while(len!=0){
        strncpy(digit, p, 4);
        printf("%s\n", digit);
        len -= 4;
        p += 4;
    }
    return 0;
}
/* output
2
0010
0020
0030
*/

数字的大小写是一个字符串,并输出到字符串。

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

int main(void){
    char number[] = "2005001000200";
    char mode[2]={0};
    char red[5]={0};
    char green[5]={0};
    char blue[5]={0};

    strncpy(mode , &number[0], 1);
    strncpy(red  , &number[1], 4);
    strncpy(green, &number[5], 4);
    strncpy(blue , &number[9], 4);

    printf("Mode = %s\n" , mode);
    printf("Red  = %s\n" , red);
    printf("Green = %s\n", green);
    printf("Blue = %s\n" , blue);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM