欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解

 更新時(shí)間:2017年08月11日 14:18:13   作者:卡哇伊的檸檬  
這篇文章主要介紹了C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解的相關(guān)資料,atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),這里就實(shí)現(xiàn)這樣的函數(shù),需要的朋友可以參考下

C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例詳解

atoi函數(shù),主要功能是將一個(gè)字符串轉(zhuǎn)變?yōu)檎麛?shù),例如將“12345”–>12345。但在實(shí)現(xiàn)過(guò)程中,我們難免會(huì)因?yàn)榭紤]不夠全面而漏掉比較重要的幾點(diǎn),今天就總結(jié)一下實(shí)現(xiàn)atoi函數(shù)需要注意的地方。

1.指針為NULL
2.字符串為空字符串
3.空白字符
4.正號(hào)與負(fù)號(hào)問(wèn)題
5.溢出問(wèn)題
6.異常字符處理

接下來(lái)看代碼:(具體幾種問(wèn)題處理都在代碼的注釋中說(shuō)明)

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <assert.h>

//定義兩個(gè)枚舉常量來(lái)表示狀態(tài)
enum STATE
{
  VALID, //合法
  INVALID,//非法
};
enum STATE state = INVALID;
int my_atoi(const char *str)
{
  int flag = 1;
  long long ret = 0;//定義為比int存儲(chǔ)范圍還要大的類(lèi)型,防止后面判斷溢出時(shí)出錯(cuò)。
  //空指針
  assert(str);
  //空字符串
  if (*str == "\0")
  {
    return 0;
  }
  //空白字符
  while (isspace(*str))//用函數(shù)isspace判斷是否為空白字符
  {
    str++;
  }
  //遇到正負(fù)號(hào)
  if (*str == '-')
  {
    flag = -1;
    str++;
  }
  if (*str == '+')
  {
    str++;
  }
  //
  while (*str)
  {
    //if (*str >= '0'&&*str <= '9')
    if (isdigit(*str))//用函數(shù)isdigit判斷是否為數(shù)字字符
    {
      ret = ret * 10 + flag*(*str - '0');
      //判斷是否溢出
      if (ret > INT_MAX || ret < INT_MIN)
      {
        return ret;
      }
    }
    //異常字符
    else
    {
      break;
    }
    str++;
  }
  state = VALID;
  return ret;
}
int main()
{
  char *p = "12345";
  char *q = " -12345";
  int ret = my_atoi(p);
  int ret2 = my_atoi(q);
  printf("%d\n", ret);
  printf("%d\n", ret2);
  system("pause");
  return 0;
}

運(yùn)行結(jié)果:

以上就是C語(yǔ)言模擬實(shí)現(xiàn)atoi函數(shù)的實(shí)例,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++對(duì)Json數(shù)據(jù)的友好處理實(shí)現(xiàn)過(guò)程

    C++對(duì)Json數(shù)據(jù)的友好處理實(shí)現(xiàn)過(guò)程

    在Ajax的應(yīng)用中,前臺(tái)基本上會(huì)用到JSON作為數(shù)據(jù)交換格式,所以下面這篇文章主要給大家介紹了關(guān)于C++對(duì)Json數(shù)據(jù)的友好處理,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • C++11之后的decltype類(lèi)型指示符詳解

    C++11之后的decltype類(lèi)型指示符詳解

    為了滿足這一要求,C++11?新標(biāo)準(zhǔn)引入了另一種類(lèi)型說(shuō)明符?decltype?,它的作用是選擇并返回操作數(shù)的數(shù)據(jù)類(lèi)型,這篇文章主要介紹了C++11之后的decltype類(lèi)型指示符,需要的朋友可以參考下
    2023-01-01
  • C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 簡(jiǎn)單掌握C++中的函數(shù)模板

    簡(jiǎn)單掌握C++中的函數(shù)模板

    這篇文章主要介紹了C++中的函數(shù)模板,包括函數(shù)模板的聲明和生成以及異常處理等基本知識(shí),需要的朋友可以參考下
    2016-04-04
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)

    鏈表是線性表的鏈?zhǔn)酱鎯?chǔ)方式。鏈表的內(nèi)存是不連續(xù)的,前一個(gè)元素存儲(chǔ)地址的下一個(gè)地址中存儲(chǔ)的不一定是下一個(gè)元素。小編今天就將帶大家深入了解一下鏈表,快來(lái)學(xué)習(xí)吧
    2021-12-12
  • C++實(shí)現(xiàn)字符串刪除字符后逆序輸出

    C++實(shí)現(xiàn)字符串刪除字符后逆序輸出

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)字符串刪除字符后逆序輸出,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C語(yǔ)言數(shù)組詳細(xì)介紹

    C語(yǔ)言數(shù)組詳細(xì)介紹

    大家好,本篇文章主要講的是C語(yǔ)言數(shù)組詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語(yǔ)言指針超詳細(xì)講解上篇

    C語(yǔ)言指針超詳細(xì)講解上篇

    指針提供了對(duì)地址操作的一種方法,因此,使用指針可使得?C?語(yǔ)言能夠更高效地實(shí)現(xiàn)對(duì)計(jì)算機(jī)底層硬件的操作。另外,通過(guò)指針可以更便捷地操作數(shù)組。在一定意義上可以說(shuō),指針是?C?語(yǔ)言的精髓
    2022-04-04
  • C++處理鍵盤(pán)輸入的方法

    C++處理鍵盤(pán)輸入的方法

    這篇文章主要介紹了C++處理鍵盤(pán)輸入的方法,是C++程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C++插件化 NDD源碼的插件機(jī)制實(shí)現(xiàn)解析

    C++插件化 NDD源碼的插件機(jī)制實(shí)現(xiàn)解析

    這篇文章主要介紹了C++插件化 NDD源碼的插件機(jī)制實(shí)現(xiàn)解析,這里再介紹推薦下優(yōu)秀的國(guó)產(chǎn)軟件開(kāi)源項(xiàng)目?NDD(notepad--),一個(gè)支持windows/linux/mac的文本編輯器,目標(biāo)是要國(guó)產(chǎn)替換同類(lèi)軟件,需要的朋友可以參考下
    2023-03-03

最新評(píng)論