服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

香港云服务器
服务器之家 - 编程语言 - C/C++ - C++中字符串与整型及浮点型转换全攻略

C++中字符串与整型及浮点型转换全攻略

2022-01-05 15:50异想之旅 C/C++

C++算法刷题等过程中经常会遇到字符串与数字类型的转换,在这其中虽然朴素的算法有不少,但是对于double等类型还是可以说遇到一些麻烦,所以今天就来说说使用C++标准库中的函数实现这些功能。感兴趣的小伙伴一起参与阅读吧

首先请出今日主角:stdlib.h (YYDS)

这个库包含有随机数,abs等许多通用函数,当然也有类型的转换

下面我们一点点来看如何完成格式转换

一、string 和 char []

1. string 转 char []

string 是一个类,而 char [] 的变量名本质上是一个地址,咋一看这俩好像不太好转换。

但是事实上我们正是可以通过地址的方式将string 中的值整体地迁移到 char [] 中:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string.h>
#include <iostream>
using namespace std;
int main() {
    string s = "123.123";
    char a[101];
    strcpy(a, s.c_str());
    // strcpy(a, s.data());  // 与上方语句等价,任选其一即可
    cout << a << endl;
 
    // 虽然传递的是地址,但是程序会将内容直接复制到 char [] 中,所以此处改变s不影响a
    s = "456.456";
    cout << a << endl;
 
    return 0;
}

输出内容:

123.123
123.123

2. char [] 转 string

代码:

?
1
2
3
4
5
6
7
8
#include <bits/stdc++.h>
using namespace std;
int main() {
    char a[100] = "123.123";
    string s = a;
    cout << s;
    return 0;
}

二、char [] 与数字互转

1. char [] 转整型和浮点型

?
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
    char a_chars[101] = "123.123";
    int a_int = atoi(a_chars);
    double a_double = atof(a_chars);
    cout << a_int << endl;
    cout << a_double << endl;
 
    return 0;
}

输出:

123
123.123

用到了头文件 stdlib.h 中的 atoi() atof() 两个函数

当然这两个函数作为标准库成员,除了可以像上面这段代码这样完成强制类型转换,处理一些特殊情况也是完全OK

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
    char a_chars[101] = "00123";
    int a_int = atoi(a_chars);
    cout << a_int << endl;
 
    char b_chars[101] = "-013.470";
    double b_double = atof(b_chars);
    cout << b_double << endl;
 
    return 0;
}

输出:

123
-13.47

如果数字较大需要转 long long long ,则使用的函数为 atol() atoll() ,用法与 atoi() 相同:

?
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
    char a_chars[101] = "00123";
    long a_long = atol(a_chars);  // long
    cout << a_long << endl;
    long long a_long_long = atoll(a_chars);  // long long
    cout << a_long_long << endl;
 
    return 0;
}

2. 整型和浮点型 转char []

?
1
2
3
4
5
6
7
8
9
#include <stdio.h>
using namespace std;
int main() {
    char a[1001];
    sprintf(a, "%.10lf", 3.1415926535);
    printf("%s", a);
 
    return 0;
}

绝对没有比这更香的操作了

printf 输出到终端,sprintf 可以直接输出到字符串中。如果字符串中有内容会覆盖写入,类似于写文件

另外 to_string() 函数可以胜任这项工作

警告:这个函数没有测试过比赛是否可用,请谨慎选择!!

?
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
int main() {
    string s = to_string(123);
    cout << s << endl;
    return 0;
}

3. 整型转 char [] (特殊函数实现)

警告!下面这段代码只有win能用,比赛都是不行的!!

看代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
    int INT = 123;
    long LONG = 123456;
    long long LONG_LONG = 123456789;
    char s[16] = {0};
    itoa(INT, s, 10);  // 要转换的数,存放结果的字符串,结果进制数(下同)
    cout << s << endl;
    ltoa(LONG, s, 10);
    cout << s << endl;
    lltoa(LONG_LONG, s, 10);  // 这里编译时有warning,原因不详
    cout << s << endl;
 
    return 0;
}

输出:

123
123456
123456789

atoi() atol() atoll() 反转一下就有了 itoa() ltoa() lltoa() , 还是比较好记的。

itoa() 为例,他接受三个参数,其中第三个表示输出字符串中使用的进制。这又可以在进制转换上帮我们大忙!

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdlib.h>
#include <iostream>
using namespace std;
int main() {
    int INT = 12;
    char s[16] = {0};
    itoa(INT, s, 2);  // 12转二进制
    cout << s << endl;
    itoa(INT, s, 8);  // 转八进制
    cout << s << endl;
    itoa(INT, s, 16);  // 十六进制
    cout << s << endl;
 
    return 0;
}

输出:

1100
14
c

再次警告!上面这段代码只有win能用,比赛都是不行的!!

提一嘴:文中用到了 s.c_str() 的写法。如果你需要使用 printf() 输出 string 类型的字符串,也需要这样:

?
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
    string str = "123";
    printf("str:%s", str.c_str());
    // printf("str:%s", str);  // 这样写真的不行
 
    return 0;
}

到此这篇关于C++中字符串与整型及浮点型转换全攻略的文章就介绍到这了,更多相关C++中字符串与整型及浮点型转换全内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_44495599/article/details/119889240

延伸 · 阅读

精彩推荐
  • C/C++学习C++编程的必备软件

    学习C++编程的必备软件

    本文给大家分享的是作者在学习使用C++进行编程的时候所用到的一些常用的软件,这里推荐给大家...

    谢恩铭10102021-05-08
  • C/C++C/C++经典实例之模拟计算器示例代码

    C/C++经典实例之模拟计算器示例代码

    最近在看到的一个需求,本以为比较简单,但花了不少时间,所以下面这篇文章主要给大家介绍了关于C/C++经典实例之模拟计算器的相关资料,文中通过示...

    jia150610152021-06-07
  • C/C++深入理解goto语句的替代实现方式分析

    深入理解goto语句的替代实现方式分析

    本篇文章是对goto语句的替代实现方式进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网7342020-12-03
  • C/C++详解c语言中的 strcpy和strncpy字符串函数使用

    详解c语言中的 strcpy和strncpy字符串函数使用

    strcpy 和strcnpy函数是字符串复制函数。接下来通过本文给大家介绍c语言中的strcpy和strncpy字符串函数使用,感兴趣的朋友跟随小编要求看看吧...

    spring-go5642021-07-02
  • C/C++c++ 单线程实现同时监听多个端口

    c++ 单线程实现同时监听多个端口

    这篇文章主要介绍了c++ 单线程实现同时监听多个端口的方法,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下...

    源之缘11542021-10-27
  • C/C++C语言中炫酷的文件操作实例详解

    C语言中炫酷的文件操作实例详解

    内存中的数据都是暂时的,当程序结束时,它们都将丢失,为了永久性的保存大量的数据,C语言提供了对文件的操作,这篇文章主要给大家介绍了关于C语言中文件...

    针眼_6702022-01-24
  • C/C++C语言实现电脑关机程序

    C语言实现电脑关机程序

    这篇文章主要为大家详细介绍了C语言实现电脑关机程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重载 重定义与重写用法详解

    C++之重载 重定义与重写用法详解

    这篇文章主要介绍了C++之重载 重定义与重写用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    青山的青6062022-01-04
906