當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 String轉int用法及代碼示例


將字符串轉換為 int 是編程世界中重複出現的任務。盡管這是一項簡單的任務,但許多程序員在執行此操作時或者失敗,或者感到困惑。轉換主要是為了我們可以對存儲為字符串的數字執行操作。

例子:

 str=”163″ 

 number=163

C 是一種強類型語言。如果我們嘗試輸入數據類型不可接受的值,我們將會收到錯誤。不僅在輸入中,我們在執行操作時也會遇到錯誤。

將字符串轉換為int有以下 3 種方法:

  1. 使用 atoi( )
  2. 使用循環
  3. 使用sscanf()

1. 使用atoi()進行字符串轉換

atol(), atoll() and atof()接受字符數組或字符串文字作為參數並以整數。它定義在<stdlib.h>頭文件。

如果你觀察atoi()靠近一點你會發現它代表:

Breakdown of atoi() in simple terms

簡單來說 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 轉換時可以做的那樣。

在上麵的代碼中,我們可以看到輸出給出了警告,其中包含任何垃圾值。因此,為了避免這種情況,我們使用上麵指定的方法。



相關用法


注:本文由純淨天空篩選整理自ankur5oz5大神的英文原創作品 Convert String to int in C。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。