如何在 C++ 中把 Char 陣列轉換為 Int

Jinku Hu 2023年1月30日 2020年10月15日
  1. 使用 std::strtol 函式將 char 陣列轉換為 int 型別
  2. 使用 sscanf() 函式將 Char 陣列轉換為 Int 陣列
如何在 C++ 中把 Char 陣列轉換為 Int

本文將介紹將 char 陣列轉換為 int 型別的 C++ 方法。

使用 std::strtol 函式將 char 陣列轉換為 int 型別

strtol 方法將 char 陣列中的第一個有效字元解釋為整數型別。該函式將轉換後的整數的數基作為第三個引數,其值在-{0,2,3,…,36}範圍內。第二個引數是型別為 char **endptr 的引數,它是可選的,如果傳遞了該引數,則儲存指向最後一個字元解釋後的字元的地址。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    auto str1_n = std::strtol(str1.data(), nullptr, 10);
    printf("%ld", str1_n);

    return EXIT_SUCCESS;
}

輸出:

23323

下面的例子演示了 strtol 函式,第二個引數是非 nullptr。請注意,我們只是將 printf 函式作為型別驗證工具,在其他情況下應該使用 cout。同樣重要的是為 strtol 函式實現錯誤處理例程,詳情可參見這裡

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");
    char *char_part = nullptr;

    auto str1_n = std::strtol(str1.data(), &char_part, 10);
    printf("%ld\n", str1_n);
    printf("%s\n", char_part);;

    return EXIT_SUCCESS;
}

輸出:

23323
experimental_string

使用 sscanf() 函式將 Char 陣列轉換為 Int 陣列

sscanf 函式從字串緩衝區讀取輸入,並根據作為第二個引數傳遞的格式指定器進行解釋。數字值儲存在指向 int 變數的指標處。在 sscanf 手冊 page中詳細介紹了格式指定符。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    int str1_n;
    sscanf(str1.data(), "%d", &str1_n);
    printf("%d\n", str1_n);

    return EXIT_SUCCESS;
}

輸出:

23323

我們也可以重新實施上面的例子來儲存輸入字串的非數字部分。在這種情況下,我們在第二個引數中新增%s 格式說明符,並將目標 char 指標作為第四個引數。請注意,sscanf 是一個可變引數函式,因為它可以從呼叫者那裡接受不同數量的引數。

#include <iostream>
#include <string>

using std::cout; using std::endl;
using std::cin; using std::string;

int main() {
    string str1("23323experimental_string");

    int str1_n3;
    string str2 {};
    sscanf(str1.data(), "%d%s", &str1_n3, str2.data());
    printf("%d\n", str1_n3);
    printf("%s\n", str2.data());

    return EXIT_SUCCESS;
}

輸出:

23323
experimental_string
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ Char