字符串的一些小知识(stringstream)

整行输入字符串 getline(cin,s);
当你整行输入前有空格或者回车时 要用getchar()抵消掉空格或者回车
要不然 整行输入时会把他们也输入进去

to_string()函数
将数值转换成字符串的形式 不支持C++11 的编译器可能不支持to_string()函数
比如说Dev-C++5.11就不支持这个函数 不过VS可以支持

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000+10;
string h;
ll x; 
int main()
{
	cin>>x;
	h=to_string(x);
	reverse(h.begin(),h.end());
	cout<<h<<endl;

return 0;
}
输入 123456789
输出 987654321

将字符串转换成数字形式
不支持C++11 的编译器可能不支持
1.stoi 将字符串转换成int类型

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000+10;
string h;
int a;
int main()
{
	h="12345";
	a=stoi(h);
	cout<<a<<endl;
	//a=12345

return 0;
}

2.stoll 将字符串转换成long long 类型

3.stof 将字符串转换成float类型

4.stod 将字符串转换成double类型

字符串的反转

#include<algorithm>
string x="12345";
reverse(x.begin(),x.end());
//x="54321";

在字符串前面补数字

string x="345";
x='2'+x;
x='1'+x;
//x="12345"

x="123";
x=x+'4';
x=x+'5';
/x="12345"

在添加数字的时候 与x的位置有关 若x在前数字添在x的后面 否则添在x的前面

stringstream
字符流概念:字符串(string)也可以看作字符流。可以用输入输出操作来完成串流的操作。串流与内存相关,所以也称内存流。
所需的头文件 #include
一般使用stringstream来进行字符串的输入输出 和数据转换
牛客的一道例题

#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000;
int t, n;
map<string, string> h;
string x, y;
int main()
{
	cin >> t;
	for (int i = 1; i <= t; i++) {
		cin >> x;
		getchar();//吃空格
		getline(cin,y);//输入一行带空格的字符串
		h[x] = y;
	}
	cin>>n;
	getchar();
	string str,b;
	while(n--){
		getline(cin,str);
		stringstream s;//定义字符串流s
		s<<str;//将字符串str转入s中  
		int res=1;
		while(s>>b){//将字符串流s的字符串转入到b中 但是遇到空格就会暂停 
			if(res==1) res=0;
			else cout<<" ";
			if(h[b]=="") cout<<b;
			else cout<<h[b];
		}
		cout<<endl;
	} 
return 0;
}

stringstream s;
string h;
总结一下 当你想把一串带空格的字符串传入到字符串流中的时候 直接s<<h. 就相当于把h字符串完全复制到s字符串流里面
而当s字符串流中是一串带空格的字符串的时候 将它传出去 s>>h 这时候的h遇到空格就会暂停
例如 s=“aa bb cc” , h=""; 进行s>>h操作后 h=“aa”;

数据转换
int 转string型 (用char数组也是一样的)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000;

int main()
{
	stringstream s;
	string h;
	int a=1000;
	s<<a;
	s>>h;
	cout<<h<<endl; 
return 0;
}
//输出为  1000 

string转int

#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000;

int main()
{
	stringstream s;
	string h="1314";
	int a;
	s<<h;
	s>>a;
	cout<<a<<endl; 
return 0;
}
//输出为  1314

注意事项 当你打算多次使用同一个stringstream对象的时候 要注意在每次使用前加一个clear();

#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<map>
using namespace std;
typedef long long ll;
const int maxt = 10000;

int main()
{
	stringstream s;
	string h="1314";
	int a;
	s<<h;
	s>>a;
	cout<<a<<endl; 
	
	s.clear(); 
	a=1000;
	s<<a;
	s>>h;
	cout<<h<<endl;
	
return 0;
}
/*输出为  1314
  		  1000
  		  		  
如果不加这个s.clear()
输出为    1314
		  1314 
  		  
*/

重要的话说三遍
stringstream的头文件是#include
stringstream的头文件是#include
stringstream的头文件是#include

点击传送门 进入原网页
感谢观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值