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

Jinku Hu 2023年10月12日
  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::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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::cin;
using std::cout;
using std::endl;
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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Char