国产探花免费观看_亚洲丰满少妇自慰呻吟_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;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲靖市| 乐都县| 无棣县| 威远县| 武宣县| 会理县| 平塘县| 新和县| 鞍山市| 通渭县| 南乐县| 穆棱市| 墨竹工卡县| 怀来县| 岑溪市| 文山县| 金华市| 龙泉市| 新平| 江西省| 甘洛县| 汉中市| 鄢陵县| 攀枝花市| 隆安县| 汉中市| 疏附县| 溧水县| 司法| 凤凰县| 新巴尔虎右旗| 岳池县| 石家庄市| 常山县| 宜兴市| 岱山县| 法库县| 金川县| 绥化市| 类乌齐县| 正阳县|