自学内容网 自学内容网

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)!