C++ ostream类为下面的指针类型定义了插入运算符函数:
const signed char *;
const unsigned char *;
const char *;
void *;
C++用指向字符串存储位置的指针来表示字符串,指针的形式可以是char数组名,显式的char指针或用引号括起来的字符串。 下面是一个简单输出字符串的例子:
#include <iostream>
using namespace std;
int main()
{
char name[] = "Kecily!";
char *Name = "yuting";
cout << name << endl;
cout << Name << endl;
}
输出结果是:
Kecily!
yuting
看看下面这个例子可看出以下用法的区别:
#include <iostream>
using namespace std;
int main()
{
char name[] = "Kecily!";
char *Name = "yuting";
cout << name << endl;
cout << *Name << endl;
}
输出时,结果是:
Kecily!
y
解析: 因为字符串指针指向的是整个字符串的起始地址,代表的是整个字符串,而*Name指向的是这个字符串的第一个字符,所以输出的结果将是所指向字符串的第一个字符;
那如果我要输出指向这个字符串的指针的地址呢,也就是指针的值;
思路解析: 对于其他类型的指针,如果要对其地址的输出,直接输出其指针即可,但是对于字符串不一样,因为其本身的指针名代表了整个字符串,所以就需要用另外一种表示方法对其地址进行输出:
#include <iostream>
using namespace std;
int main()
{
int m = 59;
char *name = "yuting";
cout << &m << endl;
cout << (void *)name << endl;
}
另外介绍一下两种cout对象输出字符和字符串的另外两种方法,就是put和write,直接使用cout对象调用输出;
先说put吧, put适用于字符输出,但是也可以对整型数字进行输出,不过进行put调用输出后的整型数字就自动转换成了char型数字字符了,输出对应ASCII字符值;
而且哦,put还可以拼接输出哦,好强大!
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i;
string name = "Kecily";
for(i=0; i<name.length()-1; i++) {
cout.put(name[i]).put('-'); //对象调用输出,以及拼接输出;
}
cout.put(name[i]).put('\n');
}
输出结果:
K-e-c-i-l-y
#include <iostream>
using namespace std;
int main()
{
int m = 67;
cout.put(m).put('\n');
}
结果是: C
write函数的原型:
basic_ostream<charT, traits>& write(const char_type* s, streamsize n);
第一个参数为要显示的字符串的地址,第二个参数为要显示字符串的多少个字符;
这个函数有点奇怪,看一下例子吧:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const char *str = "XiaoHui";
int len = std::strlen(str);
for(int i=1; i<=len; i++) { //注意喔,这里是从1开始喔;
cout.write(str, i) << endl;
}
return 0;
}
如果注释处事从0开始的话,输出会跟预计的不一样;
运行结果:
X
Xi
Xia
Xiao
XiaoH
XiaoHu
XiaoHui
另外,write函数并不会在遇到空字符时自动停止打印字符,而是打印指定数目的字符:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
const char *s1 = "hello world!";
const char *s2 = "bai bu chuan yang!";
int len = std::strlen(s1);
cout.write(s1, len+8) << endl;
}
输出:
hello world! bai bu