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;
}
原文地址:https://blog.csdn.net/weixin_74085818/article/details/142702441
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!