好吧,我正在解析由'?'和'0' - '9'組成的18個字符的字符串。我想要做的是使用atoi函數將字符串的兩個字符塊轉換爲整數。我需要解析的字符在數組中。我迷失在如何實施這樣的解決方案。解析C中字符串的兩個字符輸入
char *str = "01";
int n = atoi(str);
printf("The string %s as an integer is = %d\n",str,n);
它給你「爲整數的字符串01 = 1」
好吧,我正在解析由'?'和'0' - '9'組成的18個字符的字符串。我想要做的是使用atoi函數將字符串的兩個字符塊轉換爲整數。我需要解析的字符在數組中。我迷失在如何實施這樣的解決方案。解析C中字符串的兩個字符輸入
char *str = "01";
int n = atoi(str);
printf("The string %s as an integer is = %d\n",str,n);
它給你「爲整數的字符串01 = 1」
這裏有一些可能的工作。
strtol
,保持結果。這將使指針前進到下一個非十進制或字符串的結尾。這裏有一些來源。
#include <stdlib.h>
#include <stdio.h>
#define ARR_LEN 18
int
main(void)
{
char *str = "12?456?8??12????78";
char *ptr = str;
int result[ARR_LEN];
int i = 0;
int j = 0;
i = 0;
for (; ;)
{
while (*ptr == '?' && *ptr != '\0')
++ptr;
if (*ptr == '\0')
break;
result[i++] = (int)strtol(ptr, &ptr, 10);
}
for (j = 0; j < i; ++j)
printf("%d ", result[j]);
printf("\n");
return 0;
}
#define UNKNOWN_CONTROL -1 // integer to recognize unknown pairs
#define CONSTANT_STRING_LENGTH 18 // The string length
int i;
char string[CONSTANT_STRING_LENGTH]; // This is your string
int pairs[CONSTANT_STRING_LENGTH/2]; // Array to store results
for (i=0; i<CONSTANT_STRING_LENGTH/2; i++) { // For each pair in the string
if (string[i*2] == '?' || string[i*2]+1 == '?') // Is it a '??' pair?
pairs[i] = UNKNOWN_CONTROL; // Store some constant (> 99)
else
pairs[i] = string[i*2] * 10 + string[i*2+1] - '0' * 11; // Compute the number and store
}
然後你的陣列雙將填入您想要的結果,如果我收到了你的問題的權利。
編輯:要理解計算位,你必須明白,ASCII字符(可打印,你存儲在字符串上的)不對應於它們的整數對應。 ASCII'0'是整數48,ASCII'1'是整數49,ASCII'2'是整數50,以及...
通過將第一個字符乘以10並添加第一個字符, ASCII值,而不是整數,所以你必須減去偏差。對一個字符進行「0」(ASCII的基本數字)的抽取(例如,ASCII'2' - ASCII'0'== 2),但是對於兩個字符,必須將其乘以11。請注意「0」* 11與「0」* 10 +「0」相同。做一些數學重新分配,你可以看到到底是在做什麼:
pairs[i] = (string[i*2] - '0') * 10 + string[i*2+1] - '0';
你能舉一些例子嗎?例如,你是否必須處理字符串「」?123?456?789?12345「?如果是,你打算從中提取兩個整數?哦,你的意思是「兩個字符塊」還是兩個字符的塊?如果後者然後我不一定會麻煩atoi,你可以將一對數字轉換爲一個整數'str [0] * 10 + str [1] - '0'* 11`。此外,如果「?4」是一個可能的雙字符塊,那麼atoi無法將其轉換,因此您不一定要使用它來保存任何特殊框。 – 2011-02-02 02:50:06
問號成對出現這樣?? 23 ?? 130105 ?? 1223所以我想要的是第一個int是未知的,第二個int是23,第三個int是未知的,第四個int是13等等 – foo 2011-02-02 02:56:41
我不明白這一點:str [0] * 10 + str [1] - '0'* 11爲什麼它是* 10然後* 11謝謝你的幫助:) – foo 2011-02-02 03:00:30