cout 输出字符串(指针)常见问题及put,write函数

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



  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值