C语言把字符串转换为数字

时间:2022-05-26 01:25:01

C当中有一些函数专门用于把字符串形式转换成数值形式

printf()函数和sprintf()函数 -->通过转换说明吧数字从数字形式转换为字符串形式;

scanf()函数把输入字符串转换为数值形式;

应用场景:

编写程序需要使用数值命令形参,但是命令形参被读取为字符串。要使用数值必须先把字符串转换为数字。

atoi()函数

int atoi(char *str);

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(void)
 5 {
 6     int i,times;
 7     
 8     if(argc < 2 || times = atoi(argv[1])<1)
 9         printf("Usage:%s positive-number\n",argv[0]);
10     else
11         for(i=0;i<times;i++)
12             puts("Hello,good looking!");
13     
14     return 0;
15 }

程序运行示例:

$ hello 3

Hello, good looking!

Hello, good looking!

Hello, good looking!

作用就是根据参数,选择打印几次Hello, good looking!

如果参数开头是非数字字符,则atoi函数返回值是0;因为这种行为是未定义的。因此需要有错误检测功能的strtol()函数会更安全。

 

stdlib.h头文件:不仅包含atoi()函数,还包含了atof()函数、atol()函数;

atof()函数把字符串转换成double类型的值;

atol()函数把字符串转换成long类型的值;

++++++++++++++++++++++++++++++++++++++++++++++++++++++

strtol函数原型:long strtol(const char * restrict nptr,char ** restrict endptr, int base);

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define LIM 30
 4 char * s_gets(char * st, int n);
 5 
 6 
 7 int main(void)
 8 {
 9     char number[LIM];
10     char * end;
11     long value;
12 
13     puts("Enter a number (empty line to quit);");
14     while(s_gets(number,LIM)&& number[0] !='\0')
15     {
16         value =strtol(number,&end,10);
17         printf("base 10 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
18         value = strtol(number, &end, 16);
19         printf("base 16 input,base 10 output:%ld,stopped at %s (%d)\n",value,end, *end);
20         puts("Next number:");
21     }
22     puts("Bye!\n");
23     return 0;
24 }
25 
26 char * s_gets(char * st, int n)
27 {
28     char * ret_val;
29     int i=0;
30 
31     ret_val = fgets(st, n, stdin); //读取成功,返回一个指针,指向输入字符串的首字符;
32     if(ret_val)
33     {
34         while(st[i]!='\n' && st[i]!='\0')
35             i++;
36         if(st[i] =='\n') //fgets会把换行符也吃进来了,fgets会在末尾自动加上\0;
37             st[i]='\0';
38         else   //其实是'\0'
39             while(getchar() != '\n')  //会把缓冲区后续的字符都清空
40                 continue;
41     }
42     return ret_val;
43 }

程序运行:

Enter a number (empty line to quit);
10
base 10 input,base 10 output:10,stopped at (0)
base 16 input,base 10 output:16,stopped at (0)
Next number:
10atom
base 10 input,base 10 output:10,stopped at atom (97)
base 16 input,base 10 output:266,stopped at tom (116)
Next number: