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