簡體   English   中英

從char數組獲取最后一個整數值

[英]get last integer value from char array

考慮這樣的一個char數組:

43 234 32 32

我想要最后一個整數形式的值為32

字符串大小/長度未知。 在上面的示例中,有4個數字,但是大小會有所不同。

如何才能做到這一點?

我已經將這些值從文件復制到char array.now我想要整數變量中的最后一個數字

在復制時,添加一個計數器,用於復制#個字符。 然后做這個

int count = 0;
char c;
while(c = readCharFromFile()) {
  array[count++] = c;
}

int last = array[count - 1];

有很多解決方法。

  1. 將每個標記(以空格分隔的字符串)轉換為數字,並在標記用盡時返回最后轉換的值。

  2. 掃描行中的令牌,直到到達末尾,然后將最后一個令牌轉換為數字。

  3. 從行尾開始。 跳過空格並存儲數字,直到遇到第一個空格,然后將結果轉換為數字。

  4. 將字符串拆分為字符串數組,然后將最后一個字符串轉換為數字。

我可以繼續下去,但是你希望我能想到。

int getLastInt(char *data)
{
    size_t i = strlen(data);
    if(!i--) return -1; // failure
    for(;i;--i)
    {
        if(data[i] == ' ')
        {
            return atoi(&data[i+1]);
        }
    }
    return -1; // failure
}

只要數據有空格+實際文本就應該可以工作。 您也可以跳過strlen,而僅循環向前,這可能會更快,具體取決於系統的strlen。

如果行上沒有尾隨空白:

int last_int(const char *s)
{
    const char *ptr = strrchr(s, ' ');
    if (ptr == NULL) {
        ptr = s;
    } else {
        ptr++;
    }

    return atoi(ptr);
}

如果可能存在尾隨空格,那么您需要執行類似於ProdigySim建議的操作,但要使用更多狀態,請向后越過尾隨空格(如果有),然后越過數字,然后調用atoi()。 無論您做什么,都需要當心邊界條件和邊緣情況,並決定如何處理它們。

我猜你想結合使用strtok_r和atoi

暫無
暫無

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

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