簡體   English   中英

將字符串轉換為整數或雙精度數

[英]Converting strings to ints or doubles

我知道這是一個重復的問題,我已經看了很多答案,但到目前為止還沒有人能真正幫助我。

我需要能夠將各種字符串傳遞給兩個方法,一個返回一個double,另一個返回一個int。 主要的問題是我需要對這兩種方法進行嚴格的錯誤檢查,這樣如果我傳遞一個不包含數字的字符串,只有一個數字,那么該方法不會進行轉換。 正如我所說,我已經看到了一些解決方案,但我見過的唯一一個好的解決方案(能夠遵循)是使用我不想使用的Boost。 至於我在這里無法回答的答案是從中復制的一部分

如何在C ++中將字符串解析為int?

最好的解決方案

幸運的是,有人已經解決了上述所有問題。 C標准庫包含strtol和family,它們都沒有這些問題。

enum STR2INT_ERROR { SUCCESS, OVERFLOW, UNDERFLOW, INCONVERTIBLE };

STR2INT_ERROR str2int (int &i, char const *s, int base = 0)
{
    char *end;
    long  l;
    errno = 0;
    l = strtol(s, &end, base);
    if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
        return OVERFLOW;
    }
    if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
        return UNDERFLOW;
    }
    if (*s == '\0' || *end != '\0') {
        return INCONVERTIBLE;
    }
    i = l;
    return SUCCESS;
} 

如果有人能夠解釋一下,我認為這是我正在尋找的答案我只是無法掌握它的作用,以便我可以將這個想法應用到我的代碼中。

使用strtol (和strtod for double)聽起來像是正確的方法。 您引用的實現直接來自strtol的文檔:

  • 它在調用之前將errno為零( strtol在成功時不會更改errno
  • 它會在返回strtol時檢查errno ,以查看是否已發出錯誤信號
  • 最終條件檢查輸入是否為空,並且整個輸入已被strtol

除了你使用strtod之外, double s的實現看起來是一樣的。

作為一項學習練習,您可能想嘗試自己編寫。 我建議從一些例子開始。 您可能希望首先牢牢掌握數字在寫作中的表現方式。 “42”是什么意思? 換句話說,2代表什么,4代表什么? 同樣,“1000000”是什么意思? 一旦掌握了這些概念,請記下將字符串轉換為整數所需的步驟(英文)。 從那里開始將其轉換為代碼。 如果您在途中遇到困難,請隨時回答更多問題。

我在另一個地方重寫這個問題,最后得到了我正在尋找的答案。 對於任何想知道這里是鏈接:

strtol的基礎知識?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM