劍指Offer 049 把字串轉換成整數

2021-07-12 01:53:57 字數 2797 閱讀 2915

牛客oj:把字串轉換成整數

九度oj:

github**: 049-把字串轉換成整數

csdn題解:劍指offer–049-把字串轉換成整數

牛客oj

九度oj

csdn題解

github**

049-把字串轉換成整數

1508-把字串轉換成整數

劍指offer–049-把字串轉換成整數

049-把字串轉換成整數

相同題目 leetcode題解–8. string to integer (atoi)

題目描述

將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。

樣例輸入

1a33

-2147483648

樣例輸出

-2147483648

同樣的題目在leetcode上

相同題目 leetcode題解–8. string to integer (atoi)

簡單問題,如下**即是主要框架

for (; *str != '\0'; str++)

else

}

但是需要注意的問題,

//  排除前導的空格

while (*str == ' ' || *str == '\n' || *str == '\t') // 排除前導的空格

//  判斷符號位+ -

if (*str == '+')

else

if (*str == '-')

我的解決方案是在迴圈的過程中,只要一發生溢位就結束

//  解決over_flow的問題

// int_max 2147483647

// int_min -2147483648 minus = true

if((minus == true && value > (unsigned long)(int_max) + 1) // 負數絕對值最大為int_max + 1

|| (minus == false && value > int_max)) // 正數最大值為int_max

如果最後再判斷可能出現的問題,因為不管我們value用什麼儲存,long,long long,他們都有表示範圍,都存在溢位,字串過長時都會溢位,溢位後可能會發生截斷,或者甚至讀取成乙個負數,那麼我們迴圈結束後再判斷就不可行。

分析的已經很好了,我們直接上**吧

#include 

using

namespace

std;

// 除錯開關

#define __tmain main

#ifdef __tmain

#define debug cout

#else

#define debug 0 && cout

#endif // __tmain

class solution

bool minus = false;

// 判斷符號位+ -

if (*pstr == '+')

else

if (*pstr == '-')

long

long

int value = 0;

for (; pstr != str.end( ); pstr++)

// 解決over_flow的問題

// int_max 2147483647

// int_min -2147483648 minus = true

if((minus == true && value > (unsigned

long)(int_max) + 1) // 負數絕對值最大為int_max + 1

|| (minus == false && value > int_max)) // 正數最大值為int_max

}if(pstr != str.end( ))

else

if (value >= int_max)

else

if (value <= int_min)

return (int)value;}}

};int __tmain(void)

其中

value * 10 -=> (value << 1) + (value << 3)

*pstr - '\0' -=> *pstr & 0xf

因此

value *= 10;

value += *pstr - '0';

可以用如下**代替

value = (value << 1) + (value << 3) + (*pstr & 0xf); //value = value*10+(*pstr-『0』);

劍指offer 把字串轉成整數

時間限制 1秒 空間限制 32768k 熱度指數 259483 本題知識點 字串 將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0 輸入乙個字串,包括數字字母符號,可以為空如果是合法的數值表達則返回該數字,否則返回0示例1 2147483647 ...

劍指offer 字串

問題描述 class solution auto res temp.c str strcpy str,res strcpy 關於c 中string和char 的區別參考 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0...

劍指offer 字串

問題描述 function replacespace str 問題描述 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含 0 次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a...