第 20 題(字符串):
題目:輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。
例如輸入字符串"345",則輸出整數 345。
/* 第 20 題(字符串): 題目:輸入一個表示整數的字符串,把該字符串轉換成整數並輸出。 例如輸入字符串"345",則輸出整數 345。 start time = 8:40 end time = 8: 47 correct time = 9:46 */ //最開始什么正負號 什么輸入包含不是數字的字符 還有什么數字溢出通通都沒考慮 看了人家的答案才知道... 參考后修改成了現在的代碼 #include <stdio.h> #include <string.h> int myatoi(char * in) { int ans = 0; for(int i = 0; in[i] != '\0'; i++) { if(in[i] - '0' >= 0 && in[i] - '0' <= 9) { ans = ans * 10 + in[i] - '0'; } else if(!(i == 0 && (in[i] == '+' || in[i] == '-'))) //除了第一個字符可以是 + -號 其他位置其他符號不應出現 { printf("error! input isn't a num!"); return 0; } } if(in[0] == '-') //判斷是否為負數 { ans = 0 - ans; } //檢查是否越界 char check[100]; if(in[0] == '+') //如果輸入的第一個符號是正號 加入到check中 正數自己不會有+號 { check[0] = '+'; sprintf(check + 1, "%d", ans); } else { sprintf(check, "%d", ans); } if(strcmp(check, in) != 0) //比較得到的數字轉換成的字符串 與 輸入字符串是否有差別 有差別就是溢出了 { printf("overflow!"); return 0; } return ans; } int main() { char * cnum = "-124563567"; int num = myatoi(cnum); return 0; }
