3-3
依然是先循環(huán)遞增檢查s1數(shù)組并將當前元素的值復(fù)制到變量c中之后i自增
(while((c = s1[i++])))
如果當前元素(i自增之后)是‘-’符號并且下一元素大于c。
if(s1[i] == ‘-’ && s[i + 1] >= c)
滿足上面的條件則將i自增一次,將i自增后對應(yīng)的元素就是‘-’符號后的那個字符。然后將最初的那個字符c遞增復(fù)制到小于當前的那個元素為止。
之后如果之前的if表達式為假,則直接將c復(fù)制到數(shù)組s2里。
這個有一個問題我也想了一下,遞增到小于當前的元素(c < s1[i])的話這時候那個元素是不會復(fù)制到數(shù)組s2里去的,執(zhí)行完內(nèi)層的while循環(huán)后跳出到最外層的while循環(huán),s[i++]現(xiàn)在因為是后綴運算符,所以當前的元素就是那個需要擴充的最后一個元素??梢灾苯訌?fù)制到數(shù)組s2中去。
3-4
這個問題涉及到其他的一些問題,只能留待以后去印證了,代碼過一遍就可,先將n從最右側(cè)的位賦到數(shù)組s中(s[i++] = (n % 10)對10進行取余得到的就是個位的數(shù))然后將n最后一位刪除(n /= 10這里等價于n = n / 10 將n除以10就是減少一位,因為是整型數(shù)所以忽略小數(shù)位,)
3-5
先判斷n是否為正數(shù)并且保存n的值(if (sign = n) < 0) 如果為負則取其絕對值(n = -n)
然后跟上面的一樣繼續(xù)取最后一位的數(shù)賦值給j然后將j轉(zhuǎn)換成相應(yīng)的進制數(shù)。
然后也是刪除最后一位,之后再次執(zhí)行上面的過程。最后如果sign是負數(shù),那就給數(shù)組s加入'-'。之后就是顛倒數(shù)組s的順序。
3-6
這個題目也沒什么難度,與上面的itoa函數(shù)基本上一樣,只要在判斷是否要加‘-’的后面判斷轉(zhuǎn)換后數(shù)組的長度就可以,如果不夠就在數(shù)組中添加空格
while (i < w)
s[i++] = ' '
i是數(shù)組長度。