字串轉換成整數 (bug版)
阿新 • • 發佈:2019-02-13
題目詳情(網址http://hero.pongo.cn/home/index)
輸入一個表示整數的字串,把該字串轉換成整數並輸出,例如輸入字串"345",則輸出整數345。
請完成函式StrToInt,實現字串轉換成整數的功能。
友情提醒:
提交程式碼之前,請複查下你的程式,比如當給的字串是如左邊圖片所示的時候,有考慮到麼?
當然,它們各自對應的正確輸出如右邊圖片所示(假定你是在32位系統下,編譯環境是VS2008以上)
輸入一個表示整數的字串,把該字串轉換成整數並輸出,例如輸入字串"345",則輸出整數345。
請完成函式StrToInt,實現字串轉換成整數的功能。
友情提醒:
提交程式碼之前,請複查下你的程式,比如當給的字串是如左邊圖片所示的時候,有考慮到麼?
當然,它們各自對應的正確輸出如右邊圖片所示(假定你是在32位系統下,編譯環境是VS2008以上)
input: output:
挑戰時間:6/6/2013 9:00-11:00
題目解析:http://blog.csdn.net/v_july_v/article/details/9024123?reload
今天早上花了兩個小時的時間實現了字串轉換為整數函式,但是平臺上提交未成功,看了july的部落格分析http://blog.csdn.net/v_july_v/article/details/9024123?reload,估計問題出在沒有考慮資料溢位問題,先貼出基本程式碼,後面繼續進行完善:
測試用例都通過,思路有點不太一樣
1.首次遍歷字串中的所有字元,找出轉換為整型的有效字元(數字符號等),將負號標誌賦值,將可用數字儲存在一個數組中(available)
同時記錄可用數字的個數(index+1)
2.遍歷陣列,根據不同數字下標確定數字在整形中的位置,進行運算
3.結合負號標誌,確定返回值
int strtoint(const char *str) { int length = strlen(str); int positive = -1; //positive or not int negtive = -1; int temp; int index = -1; //index in nunmber int result = 0; char *pstr =(char*)str; int available[20]; if(0==length) //null return result; else { if(1==length) { if(*str>='0'&&*str<='9') { temp= *str-'0'; return temp; } } else { for(int i = 0;i<length;i++) { if(' '==*(pstr+i)) //kongge { if((positive==1)||(negtive==1)) //(" + 413"---0) return 0; else if(index!=-1) //("123 456"---123) goto dest; else continue; } else if(0x2b==*(pstr+i)) { if(index==-1&&(positive==1)) // (" ++2"---0) return 0; else if(index==-1&&(positive==-1)) //shouge + positive = 1; //positive else goto dest; } else if(0x2d==*(pstr+i)) { if(index==-1&&(negtive==1)) //(" --2"=0) return 0; else if(index ==-1&&(negtive==-1))//(shouge -) negtive=1; else goto dest; //tiaochu cal } else if(*(pstr+i)<'0'||*(pstr+i)>'9') //meet a go to cal goto dest; else //all number { index++; available[index] = *(pstr+i)-'0'; //begin from 0 index } } } } dest: //calculate final result if(index==-1) //no number in array return 0; else { for(int j = 0;j<index+1;j++) { int times = index-j; int multi=1; for(int k=0;k<times;k++) { multi = multi*10; } result +=available[j]*multi; } } if(negtive==1) return -result; else return result; }
測試程式碼如下:
int main()
{
char str[20];
int result = 0;
while(1)
{
printf("scanf test str:\n");
//scanf_s("%s",&str);
gets_s(str);
if(strncmp(str,"q",1)==0)
break;
result = strtoint((const char*)str);
printf("result is %d\n",result);
}
system("pause");
return 0;
}
目前存在的問題:
1.avail abe陣列長度為固定長度
2.沒有檢查整型溢位,確定整型溢位的判斷方法和處理方式