纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

异想之旅   2021-09-13 我要评论
想了解C++中字符串与整型及浮点型转换全攻略的相关内容吗异想之旅在本文为您仔细讲解C++中字符串与整型及浮点型转换的相关知识和一些Code实例欢迎阅读和指正我们先划重点:C++中字符串,C++整型,C++浮点型,转换下面大家一起来学习吧

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

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

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

一、string 和 char []

1. string 转 char []

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

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

#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

代码:

#include <bits/stdc++.h>
using namespace std;
int main() {
    char a[100] = "123.123";
    string s = a;
    cout << s;
    return 0;
}

二、char [] 与数字互转

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

#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

#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() 相同:

#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 []

#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() 函数可以胜任这项工作

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

#include <iostream>
using namespace std;
int main() {
    string s = to_string(123);
    cout << s << endl;
    return 0;
}

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

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

看代码:

#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() 为例他接受三个参数其中第三个表示输出字符串中使用的进制这又可以在进制转换上帮我们大忙!

#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 类型的字符串也需要这样:

#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;
}


相关文章

猜您喜欢

网友评论

Copyright 2020 www.sopisoft.net 【绿软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式