將字符串轉換為 int 是編程世界中重複出現的任務。盡管這是一項簡單的任務,但許多程序員在執行此操作時或者失敗,或者感到困惑。轉換主要是為了我們可以對存儲為字符串的數字執行操作。
例子:
str=”163″
number=163
C 是一種強類型語言。如果我們嘗試輸入數據類型不可接受的值,我們將會收到錯誤。不僅在輸入中,我們在執行操作時也會遇到錯誤。
將字符串轉換為int有以下 3 種方法:
- 使用 atoi( )
- 使用循環
- 使用sscanf()
1. 使用atoi()進行字符串轉換
atol(), atoll() and atof()接受字符數組或字符串文字作為參數並以整數。它定義在<stdlib.h>頭文件。
如果你觀察atoi()靠近一點你會發現它代表:
簡單來說 atoi() 的細分
例子:
C
// C program to demonstrate the
// functioning of the atoi() function
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* str1 = "141";
char* str2 = "3.14";
// explicit type casting
int res1 = atoi(str1);
// explicit type casting
int res2 = atoi(str2);
printf("atoi(%s) is %d \n", str1, res1);
printf("atoi(%s) is %d \n", str2, res2);
return 0;
}
atoi(141) is 141 atoi(3.14) is 3
Atoi 對於字符串的行為有點不同。讓我們檢查一下如何:
例子:
C
// C Program to implement
// Atoi function with char array
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* str1 = "Geek 12345";
char* str2 = "12345 Geek";
int num1 = atoi(str1);
int num2 = atoi(str2);
printf("%d is of '%s'\n", num1, str1);
printf("%d is of '%s'\n", num2, str2);
return 0;
}
0 is of 'Geek 12345' 12345 is of '12345 Geek'
解釋:
- “Geek 12345”這裏“Geek”是第一個詞,所以答案是:0(沒有數字)
- “12345 Geek”這裏‘12345’是第一個單詞,所以答案是:12345
2. 使用循環
我們可以使用循環將字符串轉換為整數,方法是逐一遍曆字符串的每個元素,並將數字字符與其 ASCII 值進行比較以獲取它們的數值,並使用一些數學來生成整數。下麵的示例演示了如何執行此操作。
例子:
C
// C Program to convert string
// into integer using for loop
#include <stdio.h>
#include <string.h>
int main()
{
char* str = "4213";
int num = 0;
// converting string to number
for (int i = 0; str[i] != '\0'; i++) {
num = num * 10 + (str[i] - 48);
}
// at this point num contains the converted number
printf("%d\n", num);
return 0;
}
4213
Note: We have used str[i] - 48 to convert the number character to their numeric values. For e.g. ASCII value of character ‘5’ is 53, so 53 - 48 = 5 which is its numeric value.
3. 使用sscanf()
我們可以使用sscanf()輕鬆地將字符串轉換為整數。該函數從字符串中讀取格式化的輸入。
sscanf 的語法:
int sscanf (const char * source, const char * formatted_string, ...);
參數:
- 來源- 源字符串。
- formatted_string- 包含以下內容的字符串格式說明符.
- ……:- 變量參數列表,其中包含我們要存儲輸入數據的變量的地址。
這些參數的數量至少應與格式說明符存儲的值的數量一樣多。成功時,該函數返回填充的變量數。如果輸入失敗,在成功讀取任何數據之前,將返回 EOF。
例子:
C
// C program to demonstrate
// the working of SSCANF() to
// convert a string into a number
#include <stdio.h>
int main()
{
const char* str1 = "12345";
const char* str2 = "12345.54";
int x;
// taking integer value using %d format specifier for
// int
sscanf(str1, "%d", &x);
printf("The value of x : %d\n", x);
float y;
// taking float value using %f format specifier for
// float
sscanf(str2, "%f", &y);
printf("The value of x : %f\n", y);
return 0;
}
The value of x : 12345 The value of x : 12345.540039
我們可以將 String 類型轉換為 int 嗎?
答案是不。如果我們使用類型轉換將字符串轉換為數字,我們將得到一個錯誤,如下例所示。
例子:
C
// C Program to check the output
// of typecasting from string to integer
#include <stdio.h>
int main()
{
string str = "8";
int num;
// Typecasting
num = (int)str;
return 0;
}
輸出:
main.c: In function ‘main’: main.c:9:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 9 | num = (int)str; | ^ 1683652612
解釋:既string 和 int 不在同一對象層次結構中, 我們無法執行隱式或顯式類型轉換正如我們在雙精度到 int 或浮點到 int 轉換時可以做的那樣。
在上麵的代碼中,我們可以看到輸出給出了警告,其中包含任何垃圾值。因此,為了避免這種情況,我們使用上麵指定的方法。
相關用法
- C語言 Structure和Array的區別用法及代碼示例
- C語言 Atoi()用法及代碼示例
- C語言 Getchar()用法及代碼示例
- C語言 abs()用法及代碼示例
- C語言 printf() and scanf()用法及代碼示例
- C語言 strchr()用法及代碼示例
- C語言 strcpy()用法及代碼示例
- C語言 strcat()用法及代碼示例
- C語言 宏 assert()用法及代碼示例
- C語言 isdigit()用法及代碼示例
- C語言 islower()用法及代碼示例
- C語言 setlocale()用法及代碼示例
- C語言 cos()用法及代碼示例
- C語言 cosh()用法及代碼示例
- C語言 sin()用法及代碼示例
- C語言 sinh()用法及代碼示例
- C語言 tanh()用法及代碼示例
- C語言 exp()用法及代碼示例
- C語言 ldexp()用法及代碼示例
- C語言 log()用法及代碼示例
- C語言 log10()用法及代碼示例
- C語言 pow()用法及代碼示例
- C語言 sqrt()用法及代碼示例
- C語言 ceil()用法及代碼示例
- C語言 fabs()用法及代碼示例
注:本文由純淨天空篩選整理自ankur5oz5大神的英文原創作品 Convert String to int in C。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。