讓我們說我們有以下數字。如何從數字中獲取一些數字?
數= 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