亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

接下來看代碼:(具體幾種問題處理都在代碼的注釋中說明)

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

//定義兩個枚舉常量來表示狀態(tài)
enum STATE
{
  VALID, //合法
  INVALID,//非法
};
enum STATE state = INVALID;
int my_atoi(const char *str)
{
  int flag = 1;
  long long ret = 0;//定義為比int存儲范圍還要大的類型,防止后面判斷溢出時出錯。
  //空指針
  assert(str);
  //空字符串
  if (*str == "\0")
  {
    return 0;
  }
  //空白字符
  while (isspace(*str))//用函數(shù)isspace判斷是否為空白字符
  {
    str++;
  }
  //遇到正負(fù)號
  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;
}

運行結(jié)果:

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

相關(guān)文章

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

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

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

    C++11之后的decltype類型指示符詳解

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

    C語言實現(xiàn)密碼本小項目

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

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

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

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

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

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

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

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

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

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

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

    C++處理鍵盤輸入的方法

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

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

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

最新評論