1. get()函数
#include<iostream>
using namespace std;
int main()
{
char s1[80], s2[80];
cout << "输入一个字符:";
cout << cin.get() << endl;
cin.get();
cout << "输入一个字符串:";
for (int i = 0; i < 80; i++)
{
cin.get(s1);
if (s1 == '\n')
{
s1 = '\0';
break;
}
}
cout << s1 << endl;
cout << "输入一个字符串:";
cin.get(s2, 80);
cout << s2 << endl;
system("pause");
return 0;
}
Get()函数有许多形式,其重载后的形式可包含参数,其返回类型也可为字符串,在实际程序中一般用不带参数的形式更多。
2. getline()函数
getline()函数也可以实现一个字符串的获取,其格式:
isstream& getline(char*, int, char)
这个函数从流中抽取字符直到终止符,或抽取字符达到参数给定的数量,或已到文件尾,将其存储在第一个参数指定的字符数组里。如果发现终止符,则从流中提取终止符,将它抛弃,并不把它存在结果缓冲区里。
#include<iostream>
using namespace std;
int main()
{
char s1[80];
cout << "输入一个字符:";
cout << cin.get() << endl;
cin.get();
cout << "输入一行字符串:";
cin.getline(s1, 80);
cout << s1 << endl;
system("pause");
return 0;
}
Get和getline都可以给参数赋值,在输入字符和字符串时,C++会有一个结束字符“\0”,用get()函数输入时,会在参数中留下这个字符,getline则不会。
3. put()
它用于输出一个字符。
cout.put(‘H’);
cout.put(‘H’).put(‘\n’);
put函数返回调用put的对象的引用。也可以用ASCII码值调用put,如:cout.put(65)输出字符‘A’
4. read()和write()
它们可实现无格式输入/输出,这2个函数分别把一定量的字符写入字符数组和从字符数组中取出。这些字符都是未经任何格式化的,以原始数据输入或者输出。如:
char buffer[]=”happy birthdy”;
cout.write(buffer,10);
输出buffer中的10个字符“happy birt”。因为字符串就是第一个字符的地址。
Read()把指定个数的字符输入到字符数组中,如果读取的字符个数少于指定的数目,可以设置标志位failbit。成员函数gcount()统计最后输入的字符个数。
下面演示了istream中成员函数read和gcount,类ostream中成员函数write的使用。
#include<iostream>
using namespace std;
int main()
{
const int SIZE = 80;
char buffer[SIZE];
cout << "输入一个字符串:";
cin.read(buffer, 10);
cout << "\n已经输入的字符串是:\n";
cout.write(buffer, cin.gcount());
cout << endl;
system("pause");
return 0;
}
5. 其他成员函数
Istream类中的其他成员函数ignore,putback,peek。Ignore用于在需要时跳过流中指定数量的字符(默认个数是1),或在遇到指定分隔符(默认EOF,使ignore在读文件的时候跳过文件末尾)时结束。
成员函数putback将最后一次用get从输入流中提取的字符放回到输入流中。Peek返回输入流中的下一个字符,但并不将其从输入流中删除。
6. 用户自定义数据类型的输入\输出
通过重载运算符“<<”和”>>”实现。
6.1重载“<<”的一般形式为:
Ostream &operator<<(ostream &stream,类名 对象名)
{//操作代码 return stream;}
其中第一个参数stream是对ostream对象的引用,必须是输出流,它可以是其他合法的标识符,但是必须和return后面的标识符相同,第二个参数是将被输出的对象。重载输出运算符“<<”要注意:
(1)重载输出运算符不能是类的成员函数,可以是普通函数或者类的友元函数;
(2)如果重载输出运算符函数要访问类的非公有成员,要把它定义为类的友元函数。
#include<iostream>
using namespace std;
class Point
{
private:
int x, y;
public:
Point():x(0),y(0){}
Point(int a,int b):x(a),y(b){}
friend ostream &operator<<(ostream &stream, Point obj);
};
ostream &operator<<(ostream &stream, Point obj)
{
stream <<"x=" << obj.x << " " << "y= " << obj.y << endl;
return stream;
}
int main()
{
Point p1(1, 2), p2(3, 4);
cout << p1 << p2;
system("pause");
return 0;
}
6.2 重载输入运算符“>>”
Istream &operator>>(istream &stream,类名 对象名)
{//操作代码 return stream;}
第一个参数stream是对isream对象的引用,必须是输入流,它可以是其他合法的标识符,必须与return 后面的相同。重载输入运算符注意:
(1)重载输入函数不能是类的成员函数,可以是普通函数或类的友元函数;
(2)如果重载输入运算符函数要访问类的非公有成员,要把它定义为类的友元函数。
#include<iostream>
using namespace std;
class Point
{
private:
int x, y;
public:
Point():x(0),y(0){}
Point(int a,int b):x(a),y(b){}
friend ostream &operator<<(ostream &output, Point obj);
friend istream &operator>>(istream &input, Point &obj);
};
ostream &operator<<(ostream &output, Point obj)
{
output << "x= " << obj.x << " " << "y= " << obj.y << endl;
return output;
}
istream &operator>>(istream &input, Point &obj)
{
cout << "输入x,y的值:" << endl;
input >> obj.x;
input >> obj.y;
return input;
}
int main()
{
Point p(10, 20);
cout << p;
cin >> p;
cout << p;
system("pause");
return 0;
}
肖骁 2018-3-8 17:25