整行输入字符串 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
点击传送门 进入原网页
感谢观看