C/C++ 字串轉數字的4種方法

本篇介紹 C/C++ 字串轉數字 string to integer 的方法,總共將會介紹4種方法,

以下 C/C++ 字串轉數字的4種方法分別是,

  • C 的字串轉數字 atoi()
  • C++ 字串轉數字 std::atoi()
  • C++11 的字串轉數字 std::stoi()
  • 自製 atoi()

那我們就開始吧!

C 的字串轉數字 atoi()

在標準 C 字串轉數字的話可以使用 atoi(),使用方法如下,
標準 C 要使用 atoi() 話,需要引入的標頭檔: <stdlib.h>

cpp-atoi.cpp
1
2
3
4
5
6
7
8
9
10
// g++ cpp-atoi.cpp -o a.out
#include <stdio.h>
#include <stdlib.h>

int main() {
char buffer[128] = "123";
int integer = atoi(buffer);
printf("str to int: %d\n", integer);
return 0;
}

輸出如下,

1
str to int: 123

C++ 字串轉數字 std::atoi()

在 C++ 字串轉數字的話可以使用 std::atoi()
C++ 要使用 std::atoi() 話,需要引入的標頭檔: <cstdlib>

cpp-string-to-integer.cpp
1
2
3
4
5
6
7
8
9
10
// g++ cpp-string-to-integer.cpp -o a.out
#include <stdio.h>
#include <cstdlib>

int main() {
char buffer[128] = "456";
int integer = std::atoi(buffer);
printf("str to int: %d\n", integer);
return 0;
}

輸出如下,

1
str to int: 456

要使用 std::string 字串轉數字的話,要碼就轉成傳統字串在使用之前介紹的 api,

cpp-string-to-integer2.cpp
1
2
3
4
5
6
7
8
9
10
11
// g++ cpp-string-to-integer2.cpp -o a.out
#include <stdio.h>
#include <string>
#include <cstdlib>

int main() {
std::string str = "456";
int integer = std::atoi(str.c_str());
printf("str to int: %d\n", integer);
return 0;
}

C++11 的字串轉數字 std::stoi()

但 C++11 支援了直接使用 std::string 作為輸入參數,這邊就要介紹 C++11 新增的 std::stoi() 函式用來字串轉整數,
C++11 要使用 std::stoi() 話,需要引入的標頭檔: <string>
趕緊來看看怎麼寫吧!

cpp-string-to-integer3.cpp
1
2
3
4
5
6
7
8
9
10
// g++ cpp-string-to-integer3.cpp -o a.out -std=c++11
#include <iostream>
#include <string>

int main() {
std::string str = "789";
int integer = std::stoi(str);
printf("str to int: %d\n", integer);
return 0;
}

輸出如下,

1
str to int: 789

自製 atoi()

這邊示範一下如果要自己寫一個 atoi 要怎麼寫,有時候面試考題也會出現,所以多學一些是好事,另外要注意的是 atoi 可能會與標準函式庫提供的同名重複定義,要確認輸入型別是否不一樣,否則的話就換個名字,避免衝突,

cpp-string-to-integer4.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// g++ cpp-string-to-integer4.cpp -o a.out
#include <stdio.h>
#include <ctype.h>

int myatoi(const char *s) {
int sum = 0;
int i = 0;
int sign = 1;

if (s[i] == '-') {
sign = -1;
i++;
}

while (isdigit(s[i])) {
sum = sum * 10 + s[i] - '0';
i++;
}
return sum * sign;
}

int main() {
char buffer[] = "12345";
int integer = myatoi(buffer);
printf("str to int: %d\n", integer);

char buffer2[] = "-12345";
int integer2 = myatoi(buffer2);
printf("str to int: %d\n", integer2);
return 0;
}

輸出如下,

1
2
str to int: 12345
str to int: -12345

以上就是 C/C++ 字串轉數字的4種方法的介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
如果你想了解 C/C++ 整數轉字串的方法可以參考這篇

參考
atoi - C++ Reference
https://www.cplusplus.com/reference/cstdlib/atoi/
std::atoi, std::atol, std::atoll - cppreference.com
https://en.cppreference.com/w/cpp/string/byte/atoi
c++11 - What is the difference between std::atoi() and std::stoi? - Stack Overflow
https://stackoverflow.com/questions/20583945/what-is-the-difference-between-stdatoi-and-stdstoi

其它相關文章推薦
C/C++ 新手入門教學懶人包
C/C++ 整數轉字串的方法與範例
C++ virtual 的兩種用法
C/C++ 字串反轉 reverse
C/C++ call by value傳值, call by pointer傳址, call by reference傳參考 的差別
C++ 類別樣板 class template
std::sort 用法與範例
std::find 用法與範例
std::queue 用法與範例
std::map 用法與範例