让我们说我们有以下数字。如何从数字中获取一些数字?
数= 2001000200030
我怎样才能抢到第一位,并将其存储到一个变量?然后 抓住接下来的四位数字并将它们存储到另一个变量? 然后接下来的四位数......
所以输出应该是这样的。
first = 2;
firstfour = 0010
secondfour = 0020
thirdfour = 0030
谢谢你,我很欣赏你的时间。
让我们说我们有以下数字。如何从数字中获取一些数字?
数= 2001000200030
我怎样才能抢到第一位,并将其存储到一个变量?然后 抓住接下来的四位数字并将它们存储到另一个变量? 然后接下来的四位数......
所以输出应该是这样的。
first = 2;
firstfour = 0010
secondfour = 0020
thirdfour = 0030
谢谢你,我很欣赏你的时间。
数字以二进制形式存储在计算机中,因此整数不能区分个别数字。
将数字转换为字符串并提取您需要的部分。如果需要,您还可以将每个部分转换回数字。 (有可能更漂亮的方法来提取部分字符串)
此代码是为这个人为的例子,如果整数是未知的,此代码不能安全地做出它的假设。
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);
“不能安全地做出它的假设” - 我会给你一个upvote,如果你说什么的假设是:) – 2013-05-02 00:11:05
@TimothyJones哈哈,我认为最主要的是字符串的长度大于8个字符和少于64.我认为它应该适用于这种限制内的情况。 – 2013-05-02 00:25:55
为什么不使用'%8d'来回避最小长度假设?另外,你的例子不会在大多数系统上编译,因为'2001000200030'大于'2^32'。对于额外的功劳,你可以使用'(int)log10(INT_MAX)+ 3'来确定'string'的大小(+3 = +1来使数学运作,+1来处理负号, +1空终止符) – 2013-05-02 02:04:07
#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;
}
为什么使用字符串时,你可以坚持处理数字?您可以使用模数和除数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;
}
您可以随时将其转换为字符串并按字节抓取。 – 2013-05-01 22:44:42
我不知道,除非我看到一个例子。 – Ammar 2013-05-01 22:45:37
我添加了一个答案,演示如何做到这一点。 – 2013-05-01 22:54:06