Cách đơn giản để chuyển đổi sáng giá trị số – C String to Int

Ngôn ngữ lập trình C được ra đời vào năm 1972 do Dennis Ritchie. Ngôn ngữ này có nguồn gốc từ ngôn ngữ B, được phát hành vào năm 1970. Trong số các phần mềm khác, Linux và MySQL được viết bằng C. Trong đó cách chuyển đổi chuỗi thành số nguyên (giá trị số) bằng ngôn ngữ lập trình C được mọi người quan tâm khá nhiều. Nên hôm nay Box.edu sẽ giới thiệu cho các bạn C String to Int và cách đơn giản để chuyển đổi sang giá trị số.

👉 Xem thêm: Tổng quan kiến thức về lập trình hướng đối tượng trong C

👉 Xem thêm: Những kiến thức tổng quan về tệp C dành cho người lập trình

👉 Xem thêm: Tổng quan những kiến thức cần biết về hàm strlen C tốt nhất

Mục lục bài viết

Tổng quan về C String to Int

tong-quan-ve-c-string-to-int.jpg

Tổng quan về C String to Int

Đối với ngôn ngữ C, chuỗi được biết đến là kiểu được sử dụng để lưu trữ bất kỳ văn bản nào, bao gồm cả chữ và số cũng như các ký tự đặc biệt. Ngoài ra nó được biểu diễn dưới dạng một mảng các ký tự. Thông thường người ta kết thúc một chuỗi trong C bằng ký tự NULL, đó là lý do tại sao chúng được gọi là “chuỗi kết thúc bằng null”. Để biểu diễn một chuỗi trong C, thì bạn hãy đặt nó trong dấu ngoặc kép.

Bên trong, một chuỗi thường được biểu diễn bằng C cụ thể trong đó \ 0 chính là ký tự rỗng:

| T | h | tôi | s | | a | | s | t | r | tôi | n | g | \ 0 |

Hiện nay nhiều chương trình C sử dụng chuỗi và các thuộc tính liên quan. Tệp tiêu đề cần thiết cho các hàm chuỗi là string.h. Các hoạt động có thể thực hiện trên chuỗi bao gồm là: tính toán độ dài chuỗi, nối nhiều chuỗi, so sánh nhiều chuỗi và sao chép chuỗi. Dưới đây là một ví dụ về cách tạo một chuỗi trong C:

#include <stdio.h>
#include <string.h>

int main () {

   char string1[12] = "Hello";
   char string2[12] = "World";
   char string3[12];
   int  len ;

   /* copies string1 into string3 */
   strcpy(string3, string1);
   printf("strcpy( string3, string1) :  %s\n", string3 );

   /* concatenates string1 and string2 */
   strcat( string1, string2);
   printf("strcat( string1, string2):   %s\n", string1 );

   /* total lenghth of string1 after concatenation */
   len = strlen(string1);
   printf("strlen(string1) :  %d\n", len );

   return 0;
}

Chuyển đổi kiểu là gì?

Với mỗi chương trình C thì các biểu thức chứa các biến và hằng số của các kiểu dữ liệu sẽ khác nhau. Đối với mục đích tính toán, chúng phải chuyển đổi sang cùng một kiểu dữ liệu. Chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác thì được gọi là chuyển đổi kiểu.

Trong ngôn ngữ C, thường có hai kiểu chuyển đổi đó là:

  • Chuyển đổi loại ngầm định: Trình biên dịch sẽ tự động thực hiện điều này. Khi đó lập trình viên sẽ không có bất kỳ vai trò nào ở đây
  • Chuyển đổi loại rõ ràng: Ở đây lập trình viên sẽ chịu trách nhiệm về việc chuyển đổi kiểu. Đây cũng được gọi là đánh máy. Cú pháp cụ thể như sau:
(datatype) expression;

Mục trên là một toán tử ép kiểu. Cùng xem ví dụ dưới đây:

char a;
int b;
a = (char)b;

Trên đây là một ví dụ đơn giản để chuyển đổi một số nguyên thành một kiểu ký tự. Ở đây, “a” chính là kiểu dữ liệu ký tự và b là kiểu dữ liệu số nguyên. Đặc biệt không thể gán giá trị của biến b cho biến a vì chúng thuộc các kiểu dữ liệu khác nhau. Do vậy, bạn có thể thực hiện gõ số nguyên b thành ký tự ở ví dụ này. Lúc này cả a và b đều thuộc kiểu dữ liệu ký tự.

Cách chuyển đổi số nguyên C String to Int

Để có thể sử dụng nó cho bất kỳ phép toán nào, thì các bạn phải chuyển đổi chuỗi thành số nguyên. Hiện nay có một vài cách chuyển đổi chuỗi thành giá trị số nguyên thông qua sử dụng ngôn ngữ C. Cụ thể:

  • Phương pháp đầu tiên chính là việc chuyển đổi thủ công chuỗi thành số nguyên với mã tùy chỉnh
  • Phương pháp thứ hai là sử dụng hàm atoi có trong thư viện chuẩn C
  • Phương pháp tiếp theo đó là sử dụng hàm sscanf có trong thư viện tiêu chuẩn C
  • Phương thức thứ tư sử dụng hàm strtol () có trong thư viện chuẩn C
  • Phương thức thứ năm sẽ sử dụng hàm strtoumax () có trong thư viện tiêu chuẩn C

Chuyển đổi thủ công C String to Int thành một số nguyên

Dưới đây là danh sách các ký tự ASCII và giá trị thập phân của chúng.

Tổng hợp các ký tự ASCII                 Giá trị thập phân
0                                              48
1                                              49
2                                              50
3                                              51
4                                              52
5                                              53
6                                              54
7                                              55
8                                              56
9                                              57

Các số được lưu trữ trong một chuỗi theo giá trị ký tự ASCII của chúng. Do đó bạn phải làm phép toán để lấy ra một giá trị mà chúng ta có thể sử dụng như một số nguyên. Để nhận được giá trị thập phân của mỗi phần tử chuỗi, phải trừ nó với giá trị thập phân của ký tự “0”. 

#include <stdio.h>
#include <string.h>

main() {
  char num[50];
  int  i, len;
  int result = 0;
  
  printf("Enter a number: ");
  gets(num);
  len = strlen(num);

	for(i=0; i<len; i++){
		result = result * 10 + ( num[i] - '0' );
	}

	printf("%d", result);
}

Trong chương trình này, bao gồm stdio.h và string.h từ thư viện tiêu chuẩn C. Điều này cho phép các bạn sử dụng các chức năng là một phần của các tệp tiêu đề này. Ngôn ngữ lập trình C không tự động bao gồm các chức năng này. Do đó bạn phải nhập chúng vào phần mềm của mình để sử dụng.

Hàm main thực thi chương trình C. Do vậy bắt buộc phải có trong mọi chương trình C. Mã chương trình thường được viết trong dấu ngoặc nhọn của hàm main. Bên trong hàm main, đầu tiên cần xác định và khai báo các biến cùng với kiểu dữ liệu của chúng. Các biến i, len và kết quả được khai báo là kiểu dữ liệu số nguyên. Biến kết quả sẽ khởi tạo bằng 0.

Sau đó, hàm printf () được gọi để hiển thị thông báo “nhập một số” trên màn hình đầu ra. get (num) sẽ đọc số đầu vào và lưu trữ nó dưới dạng chuỗi. Trong trường hợp này, chuỗi là một mảng các ký tự được trỏ tới bởi num. Tiếp theo là tính độ dài của chuỗi bằng cách sử dụng hàm strlen (). Sau khi lặp qua chuỗi và chuyển chuỗi thành các giá trị thập phân thì cuối cùng, chuỗi sẽ chuyển thành một số nguyên và được in ra màn hình.

Chuyển đổi một chuỗi thành một số nguyên khi sử dụng hàm atoi ()

chuyen-doi-mot-chuoi-thanh-mot-so-nguyen-khi-su-dung-ham-atoi.jpg

Chuyển đổi một chuỗi thành một số nguyên khi sử dụng hàm atoi ()

Hàm atoi () được dùng cho việc chuyển đổi kiểu dữ liệu chuỗi thành kiểu dữ liệu số nguyên trong ngôn ngữ C. Cú pháp của hàm này đó là:

int atoi((const char * str);

Ở đây, str là kiểu con trỏ tới một ký tự. Từ khóa const làm cho các biến không thể sửa đổi được. Hàm này sẽ trả về một giá trị số nguyên sau khi thực thi. Bao gồm stdlib.h vì là nơi chứa hàm atoi (). Tệp tiêu đề này chứa tất cả các hàm truyền kiểu được sử dụng trong ngôn ngữ C.

#include <stdio.h>
#include <stdlib.h>

main() {
  char x[10] = "450";
  int result = atoi(x);
  printf("integer value of the string is %d\n", result);
}

Lưu ý rằng giá trị chuỗi được sử dụng ở hàm này phải là một chuỗi các ký tự có thể diễn giải được dưới dạng giá trị số. Hàm sẽ ngừng đọc đầu vào khi nó gặp một ký tự không phải số. 

#include <stdio.h>
#include <stdlib.h>

main() {
  char x[10] = "99x677";
  int result = atoi(x);
  printf("integer value of the string is %d\n", result);
}

Chương trình trên sẽ in ra: “giá trị số nguyên của chuỗi là 99”.

Hàm atoi cũng bỏ qua bất kỳ ký tự khoảng trắng nào ở đầu, nhưng nếu gặp bên trong chuỗi, nó sẽ ngừng xử lý chuỗi. Đồng thời sẽ trả về 0 nếu nó không thể chuyển đổi chuỗi thành số nguyên. Nếu có tràn, nó sẽ trả về không xác định. Hàm atoi cũng không nhận dạng số thập phân hoặc số mũ. Vì vậy, bạn sẽ phải viết mã của mình để giải thích là atoi chỉ âm thầm không thành công thay vì đưa ra lỗi khi nó không thể chuyển đổi một chuỗi thành một số nguyên. Trên thực tế hàm trả về 0 khi chuyển đổi không hoạt động có thể khó giải quyết, vì đó là một số nguyên hợp lệ.

Chuyển đổi một chuỗi thành một số nguyên bằng cách sử dụng hàm strtoumax ()

C strtoumax () rất giống với hàm strlol (), nhưng chúng trả về giá trị intmax_t, chính là kiểu số nguyên lớn nhất có thể có trong C. Cú pháp của nó giống nhau:

long int strtoumax(const char *str, char **endptr, int base);

Dưới đây là một ví dụ sử dụng hàm strtoumax:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char int[10] = " 98765", *end;
  
  unsigned long x = strtoumax(int, &end, 10);
  printf("the integer value is %ld\n", x);
  
  return 0;
}

Hàm này tương tự khi viết cho hàm strlol (). Đây là kết quả của chương trình này: giá trị số nguyên là 98765

Một vài cách khác để chuyển đổi C String to Int

Đây không phải là hàm duy nhất có thể sử dụng trong C để chuyển đổi chuỗi thành số nguyên. Vì nó là một ngôn ngữ linh hoạt và cung cấp cho bạn rất nhiều lựa chọn. 

  • strtoul: Tương tự như strtol, nhưng nó hoạt động với số nguyên không dấu thay vì số nguyên có dấu
  • wcstoul: Giống như hàm strtoul, nhưng nó xử lý các chuỗi ký tự rộng
  • strtoll: Cũng giống với strtol ngoại trừ nó trả về một giá trị int dài dài và chấp nhận các số có phạm vi lớn hơn
  • wcstoll: Tương tự như stroll, tuy nhiên nó xử lý các chuỗi ký tự rộng
  • strtoimax: Nó hoạt động với số nguyên có dấu thay vì không dấu

Tổng kết

Box.edu hy vọng rằng những chia sẻ trên về C String to Int sẽ giúp các bạn có thể biết thêm những cách chuyển đổi sang giá trị số một cách chính xác và phù hợp nhất. Hiện nay có rất nhiều cách mà bạn có thể sự dụng khác nhau tuy nhiên cần lựa chọn cách thức tốt nhất.

5/5 - (4 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.