Chuyển kiểu string sang int trong c/c++ như thế nào? Có những cách nào giúp bạn chuyển từ kiểu string sang int trong c/c++?
Bạn đang xem: chuyển số thành chuỗi trong c++
This entry is part 57 of 69 in the series
83
/ 100
This entry is part 57 of 69 in the series Học C Không Khó
Chuyển kiểu string sang int trong c/c++ như thế nào? Có những cách nào giúp bạn chuyển từ kiểu string sang int trong c/c++?. Trong bài viết này Nguyễn Văn Hiếu Blog sẽ cùng các bạn tìm hiểu về những cách chuyển từ kiểu string sang kiểu int trong c/c++. Các bạn có thể sử dụng bất kỳ cách nào bạn thấy phù hợp trong những cách được trình bày trong bài.
Nếu bạn đang tìm cách chuyển từ int sang string, hãy đọc bài viết cách chuyển int sang string nhé.
1. Cách chuyển kiểu string sang int
Trong quá trình lập trình, chắc chắn sẽ có nhiều trường hợp bạn cần chuyển kiểu dữ liệu từ string sang int. Với các ngôn ngữ lập trình bậc cao, việc chuyển đổi này trở nên đơn giản khi có sự hỗ trợ của các hàm được xây dựng sẵn. Oh, nhưng C/C++ cũng có một số cách chuyển đổi đấy; C/C++ cũng có một số hàm dựng sẵn để bạn sử dụng; Mình sẽ trình bày ở mục tiếp theo. Nhưng nếu bạn muốn tự chuyển từ string sang int, hãy đọc qua ý tưởng mình trình bày ở cách 1 nhé.
Dưới đây là một số cách khác nhau để chuyển kiểu string sang int trong C/C++:
Cách 1. Sử dụng vòng lặp for
Giả sử, nếu bạn có một chuỗi string là “12345”. Làm sao bạn chuyển thành số 12345 được.
Mình phân tích một chút:
12345 = 5*10^0 + 4*10^1 + 3*10^2 + 2*10^3 + 1*10^4.
Ok, như vậy, bạn chỉ cần lấy từng ký tự từ cuối lên, và nhân với 10^x
, x sẽ tăng dần từ 0. Cộng tổng chúng lại là được kết quả rồi đấy.
Cách 2. Sử dụng hàm atoi()
1
2
int
atoi
(
const
char
*
str
)
;
Hàm atoi()
thuộc thư viện stdlib.h
của ngôn ngữ C/C++. Hàm này nhận vào mảng có kiểu char[]
. Do vậy, nếu bạn muốn chuyển từ chuỗi sang số thì cần chuyển chuỗi về string trước; Bằng cách sử dụng c_str()
.
Cách 3. Sử dụng hàm stoi()
1
2
int
stoi
(
const
string
& str, size_t* index = 0, int base = 10);
Lưu ý: Hàm này chỉ làm việc với C++11 trở lên.
- Tham số
str
: Biến string cần chuyển sang kiểu int - Tham số
index
: Chỉ định chỉ số bắt đầu chuyển - Tham số
base
: Chỉ định cơ số của input.
Cách 4. Sử dụng hàm sscanf()
Hàm này có đối số nhận vào là char*
. Do vậy, nếu bạn cần chuyển từ string, hãy chuyển string
về char*
sử dụng hàm c_str()
nhé.
Cách 5. Sử dụng stringstream
Đây là một cách khá đơn giản. Hàm này có trong thư viện sstream
của C++.
2. Code chuyển kiểu int sang string
Sau đây, mình xin chia sẻ code các cách mình đã trình bày ở trên. Các bạn có thể tham khảo và nâng cấp thêm.
Cách 1. Chyển string sang int sử dụng vòng lặp for
Với cách này, tạm thời code dưới đây mình chỉ áp dụng cho số nguyên. Nếu bạn cần chuyển string số thực, bạn hãy xác định vị trí của dấu “.”. Sau đó phần sau dấu “.” sẽ nhân với 10^x, x bắt đầu từ -1 và giảm dần khi xa dấu “.”
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
#include <iostream>
#include <string>
#include <string.h>
#include <math.h>
using
namespace
std
;
int
main
(
)
{
// Chuyen kieu string ve int
string
s
=
“12345”
;
int
l1
=
s
.
length
(
)
;
int
num1
=
;
for
(
int
i
=
l1
–
1
;
i
>
=
;
—
i
)
{
num1
+=
(
int
)
(
s
[
i
]
–
‘0’
)
*
pow
(
10
,
l1
–
i
–
1
)
;
}
cout
<
<
“num1 = “
<
<
num1
<
<
‘n’
;
// Chuyen kieu char*(char[]) ve int
char
*
ch
=
“135”
;
int
l2
=
strlen
(
ch
)
;
int
num2
=
;
for
(
int
i
=
l2
–
1
;
i
>
=
;
—
i
)
{
num2
+=
(
int
)
(
ch
[
i
]
–
‘0’
)
*
pow
(
10
,
l2
–
i
–
1
)
;
}
cout
<
<
“num2 = “
<
<
num2
<
<
‘n’
;
}
Output:
1
2
3
num1
=
12345
num2
=
135
Cách 2. Chuyển chuỗi sang số sử dụng hàm atoi()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <stdlib.h>
using
namespace
std
;
int
main
(
)
{
const
char
*
str1
=
“42”
;
const
char
*
str2
=
“3.14159”
;
const
char
*
str3
=
“31337 nguyenvanhieu.vn”
;
string
s
=
“12345”
;
int
num1
=
atoi
(
str1
)
;
int
num2
=
atoi
(
str2
)
;
int
num3
=
atoi
(
str3
)
;
int
num4
=
atoi
(
s
.
c_str
(
)
)
;
// Nếu là string, convert về char array sử dụng .c_str()
cout
<
<
“atoi(“”
<
<
str1
<
<
“”) is “
<
<
num1
<
<
‘n’
;
cout
<
<
“atoi(“”
<
<
str2
<
<
“”) is “
<
<
num2
<
<
‘n’
;
cout
<
<
“atoi(“”
<
<
str3
<
<
“”) is “
<
<
num3
<
<
‘n’
;
cout
<
<
“atoi(“”
<
<
s
<
<
“”) is “
<
<
num4
<
<
‘n’
;
}
Output:
1
2
3
4
5
atoi(“42”) is 42
atoi(“3.14159”) is 3
atoi(“31337 nguyenvanhieu.vn”) is 31337
atoi(“12345”) is 12345
Cách 3. Sử dụng hàm stoi()
Lưu ý: Hàm này chỉ làm việc với C++11 trở lên.
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
// C++ program to demonstrate working of stoi()
// Work only if compiler supports C++11 or above.
#include <iostream>
#include <string>
using
namespace
std
;
int
main
(
)
{
string
str1
=
“45”
;
string
str2
=
“3.14159”
;
string
str3
=
“31337 nguyenvanhieu.vn”
;
int
myint1
=
stoi
(
str1
)
;
int
myint2
=
stoi
(
str2
)
;
int
myint3
=
stoi
(
str3
)
;
cout
<
<
“stoi(“”
<
<
str1
<
<
“”) is “
<
<
myint1
<
<
‘n’
;
cout
<
<
“stoi(“”
<
<
str2
<
<
“”) is “
<
<
myint2
<
<
‘n’
;
cout
<
<
“stoi(“”
<
<
str3
<
<
“”) is “
<
<
myint3
<
<
‘n’
;
return
;
}
Output:
1
2
3
4
stoi(“45”) is 45
stoi(“3.14159”) is 3
stoi(“31337 nguyenvanhieu.vn”) is 31337
Cách 4. Chuyển string sang kiểu int sử dụng sscanf()
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int
main
(
)
{
const
char
*
str
=
“12345”
;
int
x
;
sscanf
(
str
,
“%d”
,
&x);
printf
(
“nThe value of x : %d”
,
x
)
;
return
;
}
Output:
The value of x : 12345
Cách 5. Sử dụng stringstream
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <sstream>
using
namespace
std
;
int
main
(
)
{
string
s
=
“12345”
;
// object from the class stringstream
stringstream
str2num
(
s
)
;
// The object has the value 12345 and stream
// it to the integer x
int
x
=
;
str2num
>
>
x
;
// Now the variable x holds the value 12345
cout
<
<
“Value of x : “
<
<
x
;
return
;
}
Output:
Value of x : 12345
Trên đây là những cách chuyển string sang int trong C/C++ mà Nguyễn Văn Hiếu Blog muốn chia sẻ cho các bạn. Mong rằng với những gì chúng tôi vừa cung cấp cho các bạn sẽ giúp được phần nào đó cho các bạn trong quá trình học tập và rèn luyện của mình.
Chúc các bạn học tốt!