C++笔记-数字与字符串

进制转换

两个数字字符串转换

  目标:把一个x进制的数字符串转换成y进制字符串;
  说明:先把x进制的数转换为十进制,再将十进制数不断取模再倒序,转换成y进制;
  实现代码:

std::string transform(int x, int y, std::string s) {
    std::string res = "";
    int sum = 0;

    for (int i = 0; i < s.length(); i++) {
        if (s[i] == '-' || s[i] == 'x') continue;
        if (s[i] >= '0' && s[i] <= '9') {
            sum = sum * x + s[i] - '0';
        } else {
            sum = sum * x + s[i] - 'A' + 10;
        }
    }

    while (sum) {
        char tmp = sum % y;
        sum /= y;
        if (tmp <= 9) {
            tmp += '0';
        } else {
            tmp = tmp - 10 + 'A';
        }
        res = tmp + res;
    }
    if (res.length() == 0) res = "0";
    if (s[0] == '-') res = '-' + res;
    return res;
}

使用sprintf

  使用sprintf和sprintf_s函数;

int sprintf(char *string, char *format [,argument,...]);
其中format如下:
	%d 整数转成十进位。
	%f 倍精确度数字转成浮点数。
	%o 整数转成八进位。
	%s 字符串输出到缓冲区,不转换。
	%x 整数转成小写十六进位。
	%X 整数转成大写十六进位。

使用CString的Format函数

  %c:单个字符
  %d:十进制整数(int)
  %ld:十进制整数(long)
  %f:十进制浮点数(float)
  %lf:十进制浮点数(double)
  %o:八进制数
  %s:字符串
  %u:无符号十进制数
  %x:十六进制数

使用std::to_string函数

  可以使用to_string对各种整型、浮点数等值转换为string字符串;

字符串转换数值

 atof:字符串转换为float类型;
 atoi:字符串转换为int类型;
 atol和atoll:字符串转换为long类型或long long类型;

  也可以stoX() 系列函数来执行。该系列函数的成员可以将字符串转换为 int、long、float 和 double 类型的数字。
  注意:整数地址 pos中保存了 str 无法被转换的第一个字符的索引。

int stoi(const strings str, size_t* pos = 0, int base = 10)
long stol(const strings str, size_t* pos = 0, int base = 10)
float stof(const strings str, size_t* pos = 0)
double stod(const strings str, size_t* pos = 0)

使用ostringstream和istringstream

  C++的ostringstream和istringstream可以用来对内存中的值执行字符串/数字转换。
  ostringstream 类使用流插入运算符 << 将数值转换为字符串。ostringstream 类型对象的工作方式与cout和文件对象的工作方式相同,但它不是将数据写入屏幕或文件,而是写入它所包含的字符串对象中。
  每次在 ostringstream 对象上使用 << 时,它都会执行必要的数字到字符串的转换,并将结果追加到其字符串的末尾。除了支持   ostream 类的所有成员函数和运算符外,ostringstream 对象还支持表 1 中所示的 str 成员函数。
  istringstream 类内部包含一个字符串对象,函数将它作为可以从中"读取"的输入流。
  输入流可以在创建对象时由 istringstream 构造函数设置,也可以在创建对象后通过调用 str(string s) 函数来设置。流提取操作符 >> 从封闭的字符串中读取,并在必要时将字符串转换为数字。表 1 列出了 istringstream 的成员函数,必须在程序中包含 sstream 头文件才能使用这些类。
  注意:ostringstream和istringstream强制程序员创建 sstream 对象,只有这样才能使用它们的插入和提取运算符执行转换。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑山老妖的笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值