当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。