將整數字串轉成整數型

2021-07-11 02:21:08 字數 2202 閱讀 1100

題目:

給定乙個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0.

舉例:

str="123",返回123;

str="023",因為"023"不符合日常的書寫習慣,返回0;

str="a13",返回0;

str="0",返回0;

str="2147483647",返回2147483647;

str="2147483648",因為溢位,返回0;

str="-123",返回-123。

難度:

思路:

該題分兩步,一判斷書寫形式是否符合日常規範,若符合,進行下一步;若不符合,則直接退出。二將證書字串轉成整數值,並且判斷是否溢位。

注意:在c++語言中,int型別的邊界值是根據儲存位數決定的,因此需要利用公式或者現成的函式取得int型別的最小值(負數)。

首先,對於書寫規範的判斷,一定要考慮全面。

情形1,使用者什麼都沒有輸入,可通過字串的長度為0判別,返回false;

因為可能有"-"字元的存在,需要單獨對首字元進行判斷。

情形2,首字元為"-"且長度為1,說明字串就是"-",不符合書寫要求,返回false;

情形3,首字元為"-",長度大於1,且第二字元為0,說明字串形如"-0%",不符合書寫要求,返回false(%為任意長度的字串);

情形4,首字元為"0",且長度大於1,說明字串形如"0%",不符合書寫要求,返回false;

情形5,從下標1開始遍歷整個字串,只要出現非數字字元,返回false;

情形6,以上5種情形均不符合,則說明字串符合書寫要求,返回true。

其次,對整數字串進行轉換,遍歷期間,需要注意對於數值是否超過最小值或最大值的判斷。

一般,int型別整數的最小值為-2147483648,最大值為2147483647。可以看出,最小值的最大值比最大值的絕對值大1,因此轉換過程中的絕對值一律以負數形式出現,然後根據flag最後決定返回什麼。

對於遍歷的初始下標,根據flag決定是0還是1。遍歷過程中num是否溢位的判斷假設當前字元為ch,則'0'-ch是當前字元所代表的數字的負數形式。若num加上'0'-ch前發現num小於minq,則num加上"0"-ch一定溢位;或者若num加上"0"-ch前發現num等於minq,且當前字元"0"-ch小於minr,則num加上"0"-ch一定溢位。

以上都是對於負數形式的數字進行判斷,而對於正整數,其最大值比最小值的絕對值小1,因此遍歷結束後判斷flag==0且num==min,則說明溢位。

最後,根據flag判斷正負數,並輸出正確的數字。

**:

#include #include #define min -int(pow(2,8*sizeof(int)))

#define minq -pow(2,8*sizeof(int))/10

#define minr -int(pow(2,8*sizeof(int)))%10

using namespace std;

bool isvalid(string str,int len)

return true;

}int main()

if (!isvalid(str, len))

int val = 0, num = 0, i, flag = 0;

if (str[0] == '-')

flag = 1;

for (i = (flag ? 1 : 0); i < len; i++)

num = num * 10 - (str[i] - '0');

} if (flag == 0 && num == min)

cout << (flag ? num : -num) << endl;

system("pause");

return 0;

}

將整數字串轉成整數值

給定乙個字串s,如果字串符合日常書寫的整數形式,並且屬於32位整數的範圍,返回str所代表的整數值,否則返回0.比如 s 123 則返回123.s 0123 則返回0.s 123 則返回 123.s 0 返回0.s 返回0.s 123a4 返回0.首先,需要判斷字串中是否有非法字元,具體 如下 pu...

將整數字串轉成整數值

題目 給定乙個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回所代表的整數值,否則返回0。eg str 123 返回123.str 023 因為 023 不符合日常的書寫習慣,所以返回0.str a23 返回0 str 0 返回0 str 2147483647 返回214...

將整數字串轉成整數值

題目 給定乙個字串str,如果str符合日常書寫的整數形式,並且屬於32位整數的範圍,返回所代表的整數值,否則返回0。eg str 123 返回123.str 023 因為 023 不符合日常的書寫習慣,所以返回0.str a23 返回0 str 0 返回0 str 2147483647 返回214...