《劍指offer》:[49]把字串轉化成整數
題目:把字串轉換為整數,也就是實現atoi()。
2、如何區分字串為NULL時返回的0還是字元'0'返回的0。
3、'+''-'號也要算合法輸入,但是也得注意只有'+''-'號的情況;
4、除了'+''-'號外,'0'到'9'之外的數字也算非法輸入;
5、考慮溢位的請款,如果字串過長,也就是數字過大後會造成溢位;
也許想的還不夠周全,但是至少的注意以上的這些情況。
具體實現程式碼:
類似還有itoa(),將整數數轉化為字串,相反的過程。此題雖然簡單,但是就像高考一樣,簡單的題不一定能做對,能做對的不一定能得分。好吧,下面來看看一看應該注意的地方。
易錯點:
1、判斷字串是否為NULL的情況(這是對字串處理最基本得需要注意的地方)。2、如何區分字串為NULL時返回的0還是字元'0'返回的0。
3、'+''-'號也要算合法輸入,但是也得注意只有'+''-'號的情況;
4、除了'+''-'號外,'0'到'9'之外的數字也算非法輸入;
5、考慮溢位的請款,如果字串過長,也就是數字過大後會造成溢位;
也許想的還不夠周全,但是至少的注意以上的這些情況。
具體實現程式碼:
#include <iostream>
using namespace std;
enum status{Valid=0,InValid,IsOverFlow};
int InputStatue=Valid; //1.注意輸入為NULL;
int StrToIntCore(const char *strr,bool minus)
{
long long num=0;
while(*strr!='\0')
{
if(*strr>='0' && *strr<='9')//4.輸入的字元在0-9之外;
{
int flag=minus?-1:1;//判斷是正還是負;
num=num*10+flag*(*strr-'0');
if(!minus && num>0x7fffffff || minus && num<(signed int)0x80000000)
//5.判斷溢位情況;最大的正數0x7fffffff;最小的負數0x80000000
{
InputStatue=IsOverFlow;
num=0;
break;
}
strr++;
}
else
{
num=0;
break;
}
}
if(*strr=='\0')
InputStatue=Valid;
return num;
}
int SteToInt(const char *str)
{
InputStatue=InValid;
long long num=0;
if(str!=NULL && str!='\0')
{
bool minus=false;//3.+-號的合法性;
if(*str=='+')//'+'
str++;
else if (*str=='-')//'-'
{
str++;
minus=true;
}
if(*str!='\0')
num=StrToIntCore(str,minus);
}
return (int)num;//返回的時候轉換為int;
}
int main()
{
char *strg[7]={
"+453434",
"-342445353",
"5345734573487537257834",
"-5345734573487537257834",
"",
"+",
"0"
};
int num[7]={8,8,8,8,8,8,8};
for(int i=0;i<7;i++)
{
num[i]=SteToInt(strg[i]);
switch(InputStatue)//2.返回0的判斷是錯誤輸入還是正常返回;
{
case 0:cout<<"the result is:"<<num[i]<<endl;
break;
case 1:cout<<"輸入的資料有誤!"<<endl;
break;
case 2:cout<<"資料轉換溢位!"<<endl;
break;
}
}
system("pause");
return 0;
}
執行結果:
相關文章
- 劍指offer——把字串轉換成整數C++字串C++
- 力扣 - 劍指 Offer 67. 把字串轉換成整數力扣字串
- 《Leetcode of December》劍指 Offer 67. 把字串轉換成整數LeetCode字串
- 劍指offer(Java版)--將字串轉換為整數Java字串
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer第49題 醜數
- 劍指Offer 表示數值的字串字串
- 劍指offer—49.醜數—分析及程式碼(Java)Java
- 劍指Offer系列之「表示數值的字串」字串
- 【leetcode】劍指 Offer 16. 數值的整數次方LeetCode
- 【劍指offer】【2】字串的空格字串
- 劍指Offer-34-把陣列排成最小的數陣列
- 劍指offer——把陣列排成最小的數C++陣列C++
- 劍指 Offer 38. 字串的排列字串
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- JZ-049-把字串轉換成整數字串
- 劍指offer—58_2.左旋轉字串—分析及程式碼(Java)字串Java
- 力扣 - 劍指 Offer 45. 把陣列排成最小的數力扣陣列
- 劍指Offer-把陣列中的數排成一個最小的數陣列
- 劍指offer-轉陣列的最小數字-php陣列PHP
- 劍指OFFER
- [劍指offer] 把二叉樹列印成多行二叉樹
- 【劍指offer】7.旋轉陣列的最小數字陣列
- 【劍指 Offer】11. 旋轉陣列的最小數字陣列
- 劍指 Offer 11. 旋轉陣列的最小數字陣列
- 劍指offer:輸入n個整數,找出其中最小的K個數。
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 劍指offer——斐波那契數列
- 劍指 Offer 24. 反轉連結串列
- 劍指 Offer 24.反轉連結串列
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指 offer21
- 劍指offer16
- 劍指 offer20
- 劍指Offer-31-最小的K個數
- 字串轉換整數(atoi)字串