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
时间: 2024-10-12 11:42:47