示例一:利用atoi()、atol()、atof()函数实现字符串转数字
//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//atof()、atol()
#include <stdlib.h>
//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
const char * n1 = "123";
const char * n2 = "234abc";
const char * n3 = "abc456";
//atoi()函数可以将字符串转成int
printf("n1=%d\n", atoi(n1));
printf("n2=%d\n", atoi(n2));
printf("n3=%d\n", atoi(n3));
const char * n4 = "1.23";
const char * n5 = "2.34abc";
const char * n6 = "abc4.56";
//atof()函数可以将字符串转成double
printf("n4=%lf\n", atof(n4));
printf("n5=%lf\n", atof(n5));
printf("n6=%lf\n", atof(n6));
const char * n7 = "123456789";
const char * n8 = "234abc";
const char * n9 = "abc456";
//atol()函数可以将字符串转成long
printf("n7=%ld\n", atol(n7));
printf("n8=%ld\n", atol(n8));
printf("n9=%ld\n", atol(n9));
system("pause");
return 0;
}
示例二:更智能的函数strtol()、strtoul()、strtod()
strtol():将字符串转成long类型
strtoul():将字符串转成unsigned long类型
strtod():将字符串转成double类型
long strtol(const char * restrict nptr, char ** restrict endptr, int base)
nptr是指向待转换字符串的指针,endptr是一个指针的地址,该指针被设置为标识输入数字结束字符的地址,base表示以什么进制写入数字。
//Visual Studio中加上这句才可以使用scanf()
//否则只能使用scanf_s()
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//atof()、atol()
#include <stdlib.h>
#define LIM 30
char * s_gets(char * st, int n);
//argc: 参数个数 argv[]: 参数数组
//int main(int argc, char **argv)
int main(int argc, char *argv[])
{
char number[LIM];
char * end;
long value;
puts("Enter a number (empty line to quit):");
while (s_gets(number, LIM) && number[0] != '\0')
{
value = strtol(number, &end, 10); //十进制
printf("base 10 input, base 10 output: %ld, stopped at %s (%d)\n",
value, end, *end);//end指向一个字符,*end为所指向字符的ASCII码
value = strtol(number, &end, 16); //十六进制
printf("base 16 input, base 10 output: %ld, stopped at %s (%d)\n",
value, end, *end);
puts("Next number:");
//strol()函数最多可以转换三十六进制,'a'-'z'字符都可以作为数字
//strtoul()函数与strol()类似,strtoul()将字符串转成无符号值。
//strtod()函数只以十进制转换
/*
许多实现使用itoa()和ftoa()函数分别把整数和浮点数转换成字符串。
但是这两个函数并不是C标准库的成员,可以用sprintf()函数代替它们,
因为sprintf()的兼容性更好。
*/
}
puts("Bye!\n");
system("pause");
return 0;
}
char * s_gets(char * st, int n)
{
char * ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val) //即,ret_val != NULL
{
while (st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while (getchar() != '\n')
continue;
}
return ret_val;
}