C语言—字符串转数字

作者:追风剑情 发布于:2019-11-14 19:51 分类:C

示例一:利用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;
}

运行测试
1111.png

示例二:更智能的函数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;
}

运行测试
1111.png

标签: C语言

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号