亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如下函數寫一個程序將字符串a[10]={'a','b','c','d'}轉換為對應數值并打印出來?

如下函數寫一個程序將字符串a[10]={'a','b','c','d'}轉換為對應數值并打印出來?

C C++
蕭十郎 2022-09-17 15:11:57
例子如下,是將字符串轉換為對應數值的函數atoi,可以處理可選的前導空白符以及一個可選的加·(+)或減(-)號。int atoi(char s[]){int i, n, sign;for (i = 0; isspace(s[i]); i++) /* skip white space */;sign = (s[i] == '-') ? -1 : 1;if (s[i] == '+' || s[i] == '-') /* skip sign */i++;for (n = 0; isdigit(s[i]); i++)n = 10 * n + (s[i] - '0');return sign * n;}
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

abcd轉換數值? 你是要做16進制的嗎?

一般atoi只是轉換10進制的 不包括16進制

如果你要支持16進制 可以自行增加一個前導符 比較常用的是x

即如果字符串第一個字符為x 則表示改字符串為16進制形式 

判斷和你現有的符號判斷類似,處理數據的時候不能用isdigit判斷 而是要加入a-f的判斷

計算的時候 10*n改成16*n

簡單的例子 


int atoi(char s[])   {       int i, n, sign;        for (i = 0; isspace(s[i]); i++)  /* skip white space */           ;       if(s[i] == 'x')/*hex*/       {           i ++;           for (n = 0; isdigit(s[i]) || (s[i]>='a' && s[i] <= 'f'); i++)           {               if(isdigit(s[i]))                   n = 16 * n + (s[i] - '0');               else                   n = 16 * n + (s[i] - 'a')+10;            }           return n;       }       sign = (s[i] == '-') ? -1 : 1;       if (s[i] == '+' || s[i] == '-')  /* skip sign */           i++;       for (n = 0; isdigit(s[i]); i++)           n = 10 * n + (s[i] - '0');       return sign * n;   }


查看完整回答
反對 回復 2022-09-21
  • 1 回答
  • 0 關注
  • 126 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號