重要基础
插入器(<<)
向流输出数据,比如说系统有一个默认的标准输出流(cout),cout<<“nihao JT”<<‘\n’; 由于箭头方向向左,就是把字符串"nihao JT"和换行字符(‘\n’)输出到标准输出流,而标准输出流一般情况下就是指显示器。
吸取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),对于cin>>n,由于>>箭头方向向右,所以意思就是将cin中的数据输入n变量,所以cin>>n就把屏幕上的数据写入了n变量。也就是说箭头的方向就相当于流的方向,也就是数据的流向,对于其他流对象也是一样的道理。
通过本篇文章你会学习到:
1:字符流种类及使用
2:文章末尾讲解了三种超好用的不同类型间的转换方法
C++字符流 #include
字符流一般使用stringstream的对象
父类sstream包含了istringstream ostringstream stringstream
而stringstream又包含了istringstream,ostringstream
stringstream的成员函数
1:获取字符流对象中字符串:string str();
2:重置字符流对象中字符串:string str(const string&str):
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
//No1.str 函数
stringstream sstream(string("nihao!"));
cout << sstream.str() << endl;
sstream.str(string("woaini"));
cout << sstream.str() << endl;
sstream.clear();//此处没得用的,
//其实clear()真的用处不大,如果以后你自己写代码的时候碰到了流对象输出不了了情况,就用clear()清空一下,但有时候会不起作用,一般直接用它的内置成员函数str()就能解决问题。
cout << sstream.str() << endl;
sstream.str("");
cout << sstream.str() << endl;
/*No2.输入输出流的 :>>(读操作,把字符流对象中的东西拿出来
<<(写操作,把内容写到字符流对象中去)
*/
//2.1字符流实现数据类型转换
int num = 12345;
char str[20] = "hhaha ";
char buf[20] = "888";
cout << to_string(num) << endl;
stringstream stream(str);
cout << stream.str() << endl;
stream << num;
stream >> str;
stream.str("");
stream << buf;
stream >> num;
cout << num << endl;
cout << str << endl;
cout << stream.str() << endl;
//2.2字符串处理
//这里需要明白一个知识点:
//流出去的内容的多少取决于对象的类型是什么
//比如这下边定义了一个char temp的对象
//那么每次流到它身上的内容只有一个字节
//再比如是int类型的对象,则每次流一个整数进去,
//再比如是一个string,则流一个字符串进去,以空格为结束位置
stringstream ipInfo("ip地址: 192.168.1.1");
char info[20] = "";
ipInfo >> info;
cout << "info:" << info << endl;
int infoNum[4];
char temp;
for (int i = 0; i < 4; i++) {
ipInfo >> infoNum[i];
if (i < 3) {
ipInfo >> temp; //用char才能保证只流出一个. 不能用string
}
}
for (int i = 0; i < 4; i++) {
cout << infoNum[i] << '\t';
}
cout << temp; //最终只打印出了一个.
}
}
拓展:
1:char类型和string类型的转换
#include<iostream>
#include<string>
using namespace std;
int main(){
char str[20]="hahahah!";
string tmp=str;
//可以直接用char* 对象来初始化string类型对象
//那么char *类型如何转化为string 类型呢
char test[20]="";
strcpy(test,tmp);//这样是错误的。必须把tmp转化为char*类型
strcpy(test,tmp.c_str());//这样才是正确的。
return 0;
}
2.int类型和char类型和string类型的转化
#include <iostream>
#include<string >
using namespace std;
int main()
{
char test[20] = "";
char str[] = "nihahah !";
string tmp = str;
cout << tmp<<endl;
strcpy(test, tmp.c_str());
cout << test;
char s[] = "66";
cout << atoi(s)<<endl;
//同时附上string到int类型的转换
string ss = "100";
cout << stoi(ss);
return 0;
}
#include <iostream>
#include<string >
using namespace std;
int main()
{
char test[20] = "";
char str[] = "nihahah !";
string tmp = str;
cout << tmp<<endl;
strcpy(test, tmp.c_str());
cout << test;
char s[] = "66";
cout << atoi(s)<<endl;
//同时附上string到int类型的转换
string ss = "100";
cout << stoi(ss);
return 0;
}
3:使用sscanf和sprintf实现不同格式的转换
char str[] = "15.455";
int i;
float fp;
sscanf( str, "%d", &i ); // 将字符串转换成整数 i = 15
sscanf( str, "%f", &fp ); // 将字符串转换成浮点数 fp = 15.455000
如果要写跨平台的程序,请用sprintf。是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
char str[255];
sprintf(str, “%x”, 100); //将100转为16进制表示的字符串。
//输出8进制 = 014
pringf("%o",number);