sprintf,Stringstream

参考:STL之Stringstream字符串流使用总结

sstream

<sstream>库定义了三种类:istringstreamostringstreamstringstream,分别用来进行流的输入、输出和输入输出操作。本次主要是讨论stringstream

注意,<sstream>使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。

重复利用stringstream对象

如果你打算在多次转换中使用同一个stringstream对象,记住再每次转换前要使用clear()方法;

在多次转换中重复使用同一个stringstream(而不是每次都创建一个新的对象)对象最大的好处在于效率。stringstream对象的构造和析构函数通常是非常耗费CPU时间的。

常见基本类型互相转换

string转int

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
stringstream stream;
string s = "100";
int ans;
stream << s;
stream >> ans;
cout << ans << " " << ans - 1 << endl;
return 0;
}
out: 100 99

同理可以反过来

取一个整数k前n位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <cstdio> //sprintf
#include <sstream>
using namespace std;

typedef long long LL;
LL firstN (LL k, int n)
{
char a[30];
sprintf (a, "%ld", k); //将k转换为字符串
a [n] = 0; //截断n位
stringstream stream;
stream << a;
LL ans;
stream >> ans;
return ans;
}

取一个整数k后n位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio> //sprintf
#include <cstdlib> //atol
#include <cstring> //strlen
using namespace

typedef long long LL;
LL firstN (LL k, int n)
{
char a [30], b[30];
sprintf (a, "%ld", k);
int cnt = 0;
for(int i = strlen(a) - n; i < strlen(a); i++)
b[cnt++] = a[i];
stream << b;
LL ans;
stream >> ans;
return ans;
}

sprintf

头文件:stdio.h

函数原型:int sprintf(char buffer, const char format, [argument]…)

参数:

(1)buffer:是char类型的指针,指向写入的字符串指针;

(2)format:格式化字符串,即在程序中想要的格式;

(3)argument:可选参数,可以为任意类型的数据;

函数返回值:buffer指向的字符串的长度;

更多参考:sprintf的使用

https://baike.baidu.com/item/atol/10931326?fr=aladdin)

sprintf,sscanf,snprintf区别

C语言sprintf与sscanf函数总结