如何在 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
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