一、函数的使用
1.getline(读取包含空格的字符串)
string类中的getline函数简单基本用法。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
getline(cin,a);
cout<<a<<endl;
return 0;
}
string类中的getline函数高级用法。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
char s='0';
getline(cin,a,s);
cout<<a<<endl;
return 0;
}
此时,getline函数只会读取自己定义的字符s之前的字符,读取到s就停止读取了。
在char数组下也可以使用getline()函数简单用。
#include <iostream>
#include <string>
using namespace std;
int main()
{
char a[100];
cin.getline(a,sizeof(a));
cout<<a<<endl;
return 0;
}
cin.get()的用法同上。
2.sprintf
%% 印出百分比符号,不转换。
%c 整数转成对应的 ASCII 字元。
%d 整数转成十进位。
%f 倍精确度数字转成浮点数。
%o 整数转成八进位。
%s 整数转成字符串。
%x 整数转成小写十六进位。
%X 整数转成大写十六进位。
%n sscanf(str, "%d%n", &dig, &n),%n表示一共转换了多少位的字符
int main()
{
char str[256] = { 0 };
int data = 1024;
//将data转换为字符串
sprintf(str,"%d",data);
//获取data的十六进制
sprintf(str,"0x%X",data);
//获取data的八进制
sprintf(str,"0%o",data);
const char *s1 = "Hello";
const char *s2 = "World";
//连接字符串s1和s2
sprintf(str,"%s %s",s1,s2);
cout<<str<<endl;
return 0;
}
3.sscanf
sscanf函数原型为int sscanf(const char *str, const char *format, ...)。将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。具体功能如下:
(1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等。
(2)取指定长度的字符串
(3)取到指定字符为止的字符串
(4)取仅包含指定字符集的字符串
(5)取到指定字符集为止的字符串
当然,sscanf可以支持格式串"%[]"形式的,有兴趣的可以研究一下。
int main()
{
char s[15] = "123.432,432";
int n;
double f1;
int f2;
sscanf(s, "%lf,%d%n", &f1, &f2, &n);
cout << f1 << " " << f2 << " " << n;
return 0;
}
输出结果:123.432 432 11, 即一共转换了11位的字符。
4.stringstream
![](https://img-blog.csdnimg.cn/img_convert/48a45f245d5d476bbfc64d9c857b73b1.png)
#include<bits/stdc++.h>
using namespace std;
vector<string> ans;
int main() {
string line;
int cnt = 0;
while (getline(cin, line) && line != "#")
{
string tmp,s;
stringstream str(line);
while(str>>s)
{
if(s=="NEUQ")
{
tmp+="WOW NEUQ ";
continue;
}
tmp=tmp+s+" ";
if(s=="neuq"){cnt++;continue;}
else if(s=="Neuq"){cnt++;continue;}
else if(s=="nEuq"){cnt++;continue;}
else if(s=="neUq"){cnt++;continue;}
else if(s=="neuQ"){cnt++;continue;}
else if(s=="NEuq"){cnt++;continue;}
else if(s=="nEUq"){cnt++;continue;}
else if(s=="neUQ"){cnt++;continue;}
else if(s=="NeuQ"){cnt++;continue;}
else if(s=="NeUq"){cnt++;continue;}
else if(s=="nEuQ"){cnt++;continue;}
else if(s=="NEUq"){cnt++;continue;}
else if(s=="nEUQ"){cnt++;continue;}
else if(s=="NEuQ"){cnt++;continue;}
else if(s=="NeUQ"){cnt++;continue;}
}
ans.push_back(tmp);
}
cout << cnt<< endl;
for (auto ss : ans) cout << ss<<endl;
return 0;
}