C/C++字符串转化为数字(atoi、atof、atol、atoll、stoi、stoll、stol、stof函数用法)

数字既可以用整形进行存储,还可以用字符串进行存储,所以有时候就会遇到需要字符串转化为数字的场景,本人在做算法题目的时候经常遇到,故这里是本人学习整理的笔记。

本文简述C、C++语言提供的API,虽然没必要分的很清楚(C++兼容C么),但是做笔记按照一个分类还行需要的。

常用的转化如下:

  • C:
    • atoi
    • atof
    • atol
    • atoll
  • C++:
    • stoi
    • stol
    • stoll
    • stof

C中API

头文件:#include <stdlib.h>

atoi()

  • 字符串转int
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char str[] = "123456";
	int num = atoi(str);

	printf("str = %s = num = %d\n", str, num);

	// 输出::str = 12345 = num = 12345

	return 0;
}
  • 注意,如果字符串中含有中含有一个非数字,则只会转换这个非数字前的数字,但是字符串长度不会变化。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char str1[] = "123ab";
	char str2[] = "123a5";
	int num1 = atoi(str1);
	int num2 = atoi(str2);

	printf("str1 = %s = num1 = %d, strLength: %d\n", str1, num1, strlen(str1));
	printf("str2 = %s = num2 = %d, strLength: %d\n", str2, num2, strlen(str2));
	
	// 输出:
    /*
	str1 = 123ab = num1 = 123, strLength: 5
	str2 = 123a5 = num2 = 123, strLength: 5
	*/

	return 0;
}

atof()

  • 字符串转化为浮点数(double)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char str0[] = "12345";
	char str1[] = "123ab";
	char str2[] = "123a5";

	double num0 = atof(str0);
	double num1 = atof(str1);
	double num2 = atof(str2);

	printf("str0 = %s = num0 = %llf, strLength: %d\n", str0, num0, strlen(str0));
	printf("str1 = %s = num1 = %llf, strLength: %d\n", str1, num1, strlen(str1));
	printf("str2 = %s = num2 = %llf, strLength: %d\n", str2, num2, strlen(str2));
	

	/*
	* 输出:
	str0 = 12345 = num0 = 12345.000000, strLength: 5
	str1 = 123ab = num1 = 123.000000, strLength: 5
	str2 = 123a5 = num2 = 123.000000, strLength: 5
	*/

	return 0;
}

atol()

  • 将字符串转化为long类型
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char str0[] = "12345";
	char str1[] = "123ab";
	char str2[] = "123a5";

	long num0 = atol(str0);
	long num1 = atol(str1);
	long num2 = atol(str2);

	printf("str0 = %s = num0 = %ld, strLength: %d\n", str0, num0, strlen(str0));
	printf("str1 = %s = num1 = %ld, strLength: %d\n", str1, num1, strlen(str1));
	printf("str2 = %s = num2 = %ld, strLength: %d\n", str2, num2, strlen(str2));
	

	/*
	* 输出:
	str0 = 12345 = num0 = 12345, strLength: 5
	str1 = 123ab = num1 = 123, strLength: 5
	str2 = 123a5 = num2 = 123, strLength: 5
	*/

	return 0;
}

atoll()

  • 字符串转化为long long
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char str0[] = "12345";
	char str1[] = "123ab";
	char str2[] = "123a5";

	long long num0 = atol(str0);
	long long num1 = atol(str1);
	long long num2 = atol(str2);

	printf("str0 = %s = num0 = %lld, strLength: %d\n", str0, num0, strlen(str0));
	printf("str1 = %s = num1 = %lld, strLength: %d\n", str1, num1, strlen(str1));
	printf("str2 = %s = num2 = %lld, strLength: %d\n", str2, num2, strlen(str2));
	

	/*
	* 输出:
	str0 = 12345 = num0 = 12345, strLength: 5
	str1 = 123ab = num1 = 123, strLength: 5
	str2 = 123a5 = num2 = 123, strLength: 5
	*/

	return 0;
}

C++中API

  • 头文件:#include <string>

  • C++中的API和C语言差不多,但是C++可以转化为不同的进制,具体内容可以参考:[博客](C++stoi、stol、stoll 函数用法-CSDN博客)

  • 注意:这是C++11的特性,如果用g++/gcc编译器的话需要加上 -std=c++11

stoi()

  • 字符串转化为int
#include <iostream>
#include <string>

int main()
{
	std::string str1 = "12345";
	std::string str2 = "123a6";
	std::string str3 = "123ab";

	int num1 = stoi(str1);
	int num2 = stoi(str2);
	int num3 = stoi(str3);

	std::cout << "str1: " << str1 << " num1: " << num1 << std::endl;
	std::cout << "str2: " << str2 << " num2: " << num2 << std::endl;
	std::cout << "str3: " << str3 << " num3: " << num3 << std::endl;

	/*
	* 输出:
	str1: 12345 num1: 12345
	str2: 123a6 num2: 123
	str3: 123ab num3: 123
	*/

	return 0;
}

stol()

  • 字符串转化为long
#include <iostream>
#include <string>

int main()
{
	std::string str1 = "12345";
	std::string str2 = "123a6";
	std::string str3 = "123ab";

	long num1 = stol(str1);
	long num2 = stol(str2);
	long num3 = stol(str3);

	std::cout << "str1: " << str1 << " num1: " << num1 << std::endl;
	std::cout << "str2: " << str2 << " num2: " << num2 << std::endl;
	std::cout << "str3: " << str3 << " num3: " << num3 << std::endl;

	/*
	* 输出:
	str1: 12345 num1: 12345
	str2: 123a6 num2: 123
	str3: 123ab num3: 123
	*/

	return 0;
}

stoll()

  • 字符串转化为long long
#include <iostream>
#include <string>

int main()
{
	std::string str1 = "12345";
	std::string str2 = "123a6";
	std::string str3 = "123ab";

	long long num1 = stoll(str1);
	long long num2 = stoll(str2);
	long long num3 = stoll(str3);

	std::cout << "str1: " << str1 << " num1: " << num1 << std::endl;
	std::cout << "str2: " << str2 << " num2: " << num2 << std::endl;
	std::cout << "str3: " << str3 << " num3: " << num3 << std::endl;

	/*
	* 输出:
	str1: 12345 num1: 12345
	str2: 123a6 num2: 123
	str3: 123ab num3: 123
	*/

	return 0;
}

stof()

  • 字符串转化为double
#include <iostream>
#include <string>

int main()
{
	std::string str1 = "12345";
	std::string str2 = "123a6";
	std::string str3 = "123ab";

	double num1 = stof(str1);
	double num2 = stof(str2);
	double num3 = stof(str3);

	std::cout << "str1: " << str1 << " num1: " << num1 << std::endl;
	std::cout << "str2: " << str2 << " num2: " << num2 << std::endl;
	std::cout << "str3: " << str3 << " num3: " << num3 << std::endl;

	/*
	* 输出:
	str1: 12345 num1: 12345
	str2: 123a6 num2: 123
	str3: 123ab num3: 123
	*/

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值