stringstream的用法

1. 概述

定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

2. 用法转换

将 int 类型转换为 string 类型( << >> 箭头指向谁表示向谁赋值)

stringstream


#include <string>
#include <sstream>
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    stringstream sstream;
    string strResult;
    int nValue = 1000;
 
    // 将int类型的值放入输入流中
    sstream << nValue;
    // 从sstream中抽取前面插入的int类型的值,赋给string类型
    sstream >> strResult;
 
    cout << "[cout]strResult is: " << strResult << endl;
    printf("[printf]strResult is: %s\n", strResult.c_str());
 
    return 0;

stringstream转string,用str(),清空的话用ss.str("")

stringstream sstream;
 
    // 将多个字符串放入 sstream 中
    sstream << "first" << " " << "string,";
    sstream << " second string";
    cout << "strResult is: " << sstream.str() << endl;
 
    // 清空 sstream
    sstream.str("");

string 转 char*

char *strcpy(char* dest, const char *src);
string s1;
char *s = new char[len + 1];
strcpy(s, s1.c_str());

数字转字符串

  itoa(int1, char*, int2); //将int1以int2进制存储在char*数组里

  ltoa(long, char*, int); //将long以int进制存储在char*数组里

  ultoa(unsigned long, char*, int); //将unsigned long以int进制存储在char*数组里

  gcvt(float, int, char*);

  //将float保留int位有效数字存储在char*数组里,四舍五入,科学计数法,注意如果是3,两位及以上有效数字会转化成3.,多一个小数点

  char*=ecvt(double, int, int*1, int*2);

  //将double的整数部分和int位小数去掉小数点存储在返回值char*里,返回的int*1是小数点位置,返回的int*2是0表示正数,1表示负数

  //超出int位的部分不补零

  char*=fcvt(double, int, int*1, int*2);

  //将double的整数部分和int位小数去掉小数点存储在返回值char*里,返回的int*1是小数点位置,返回的int*2是0表示正数,1表示负数

  //超出int位的部分补零

字符串转数字:

  int=atoi(char*); //把char*转化为int

  long=atol(char*); //把char*转化为long

  double=atof(char*); //将char*转化为double

字符串转string

  string str;

  str.assign(char*, int); //从char*开始的int个字符赋值给str,若省略int这个参数,则默认赋值到最后

数字转string, to_string:

  int x=3;

  string str=to_string(x); //若改成float或者double结果会自动保留6位小数,但只要是整数都没问题,所以时间允许的话更推荐下面这种方法

  double d=3.5;

  stringstream ss;

  ss<<d;

  string s=ss.str();

  ss.clear(); //clear才能使答案正确

  ss.str(“”); //重新赋值优化空间

string转int, 可以是负数

采用标准库中 atoi 函数, 输入是const char*

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 字符串转整型 */
void StrToInt(const string &s)
{
    int num = 0;
    // 将string类型先转化为const char*类型
    const char *str = s.c_str();
    num = atoi(str);
    cout << num << endl;
}
 

采用 stoi 函数 ,输入是string

#include <string>
/* 字符串转整型 */
/*
 * 注:某些老版本的string不支持该函数
 * 原型:int stoi (const string &str, size_t *idx = 0, int base = 10);
 */
void StrToInt(const string &s)
{
    int num = 0;
    num = stoi(s);  // 等价于stoi(s, 0, 10);
    cout << num << endl;
}


stoi(str, 0, 2); //将字符串 str 从 0 位置开始到末尾的 2 进制转换为十进制
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "1010";
    int a = stoi(str, 0, 2);
    cout << a << endl;
        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值