国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

8. String to Integer (atoi)

2019-11-08 01:45:19
字體:
來源:轉載
供稿:網友

出現的問題: 1.不是輸出數字而是返回數字 2.遇到正負號不break 3.字符‘0’-‘9’的對應的整型范圍是48-58 4.string類型的length是個函數而不是一個變量所以要用str.length() 5.最后輸出的時候可以和*10再加下一位 6.例如“ +0 123”也要返回0

自己的代碼(40ms):

#include "stdafx.h"#include<iostream>#include<string>#include<vector>#include<math.h>using namespace std;int main(){ string str; vector<int> jishu; cin >> str; int flag = 0, count = 0,sym = 0 ; int result = 0; for (int i = 0; i < str.length(); i++) { if (str[i] >= 48 && str[i] < 59) { //cout << int(a[i] - '0') << endl; /*if (sym == 1) { jishu.push_back(-int(str[i] - '0')); sym = 0; } else */ jishu.push_back(int(str[i] - '0')); flag = 1; } else if (str[i] == 45&&flag!=1) { if (sym != 0) break; sym = 1; flag = 1; } else if (str[i] == 43 && flag != 1) { if (sym != 0) break; sym = 2; flag = 1; } else if (str[i] == ' '&& flag != 1) { continue; } else { break; } } for (int i = 0; i < jishu.size(); i++) { /*if (jishu[i] < 0) { jishu[i] = -jishu[i]; result += jishu[i] * pow(10, count); result = -result; } else*/ result = count*10+jishu[i]; if (result / 10 != count) { if (sym == 1) return INT_MIN; else return INT_MAX; } count = result; } if (sym == 1) result = -result; cout << result; getchar(); return 0;}

大牛寫的代碼分析:

int atoi(const char *str) { int sign = 1, base = 0, i = 0; //除去字符串前面的空格 while (str[i] == ' ') { i++; } //當遇到字符為'-'時,則sign為-1,否則為1 if (str[i] == '-' || str[i] == '+') { sign = 1 - 2 * (str[i++] == '-'); } //當符號后(或者無符號)遇到字符為數字的時候進行轉換 //若先遇到非符號或者非數字的情況的時候,則直接返回0 while (str[i] >= '0' && str[i] <= '9') { //1.若在加上最后一位之前的數大于了INT_MAX/10,則說明加上最后一位后一定會溢出,而atoi的函數功能是當遇到最大溢出 //的時候則輸出最大值就可以,所以直接根據符號進行return最大和最少值即可。 //2.若加上最后一位之前的數等于INT_MAX/10,則加上最后一位有可能不會溢出,則這時候需要進行判斷,由于int最大值為 //2147483647,則最后一位大于7則溢出,操作同上 if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - '0' > 7)) { if (sign == 1) return INT_MAX; else return INT_MIN; } base = 10 * base + (str[i++] - '0'); } return base * sign;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 瓦房店市| 永仁县| 扶沟县| 靖江市| 攀枝花市| 秀山| 五台县| 上思县| 托克逊县| 洛南县| 仙居县| 临沧市| 聂荣县| 曲靖市| 米脂县| 进贤县| 黄石市| 莲花县| 舟曲县| 托克逊县| 彝良县| 台南县| 江陵县| 庄浪县| 渑池县| 苏尼特右旗| 平远县| 邯郸县| 江阴市| 饶平县| 沂水县| 醴陵市| 湄潭县| 青川县| 隆子县| 万荣县| 玛纳斯县| 砀山县| 峨边| 瑞金市| 铜梁县|