1. c风格字符串,和strlen函数

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
char dog[] = { 'd','o','g' };
char pig[] = { 'p','i','g','\0' };
cout << strlen(dog) << endl;
cout << strlen(pig) << endl;//输出结果为3,说明strlen是字符串中除\0外有效字符的个数
cin.get();
return ;
}

2.cin从键盘输入

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
const int SIZE = ;
char name[SIZE];
char dessert[SIZE]; cout << "Whats your name?" << endl;
cin >> name;
cout << "What's your favourate dessert?" << endl;
cin >> dessert;
cout << "I have some delicious " << dessert << " for you, " << name << endl;
cin.get();
cin.get();
return ;
}

空格被作为空字符处理,可认为空格被丢弃,然后空字符被存入数组

3.每次读取一行的字符串输入(C++ Primer Plus Page78)

istream中的类(如cin)都提供了一些面向行的类成员函数:getline和get()。他们都读取一行输入,直到换行符,不同的是,随后getline()将丢弃换行符,而get()将换行符保留在了输入序列中。

cin.getline()

cin.getline()有两个参数,第一个是数组名称,第二个是要读取的字符数,如果这个参数是20,则只能读取到19个字符,最后一个用于存储自动添加在结尾的空字符。读取过程遇到空字符或者最大长度时停止

该函数还有三个参数的重载版本,在17章讨论

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
const int SIZE = ;
char name[SIZE];
char dessert[SIZE]; cout << "Whats your name?" << endl;
cin.getline(name, SIZE);
cout << "What's your favourate dessert?" << endl;
cin.getline(dessert, SIZE);
cout << "I have some delicious " << dessert << " for you, " << name << endl;
cin.get();
return ;
}

get()函数有几种变体,其中一种类似于getline,接受相同的参数,只是get不再读取并丢弃换行符,而是留在输入队列中

#include "stdafx.h"
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
int main(void)
{
const int SIZE = ;
char name[SIZE];
char dessert[SIZE]; cout << "Whats your name?" << endl;
cin.get(name, SIZE).get();
cout << "What's your favourate dessert?" << endl;
cin.get(dessert, SIZE).get();
cout << "I have some delicious " << dessert << " for you, " << name << endl;
cin.get();
return ;
}

推荐使用cin.get而不是cin.getline(),原因是cin.getline()无法知道停止读取的原因,到低是遇到了换行符,还是数组已经满了,而cin.get()可以通过读取下一个字符,看是不是换行符,如果是,则说明读取了整行

4.对空行的处理

上面的程序,就是询问姓名和甜点,并且使用了cin.get来读取输入的程序,输入在输入姓名时,上来就回车,整个程序将一闪而过,即使是最后有一个cin.get(),也没有能够使屏显停留。原因是现代实现中,getline和get对空行的处理,是在读取空行后设置失效位(failbit)。这意味着接下来的输入将被阻断。书上说可以使用cin.clear()来恢复输入,所以如果在程序最后的cin.get()前加上一行cin.clear(),将能够再次使屏显停留?实践后发现并没有效果

5.如果读取的数据大于分配的数组长度

getline()和get()都将把余下的字符留在输入队列,且getline还会设置失效位,并且关闭后面的输入。第五、六、十七章将讨论如何避免这些问题(当前为第四章)

c++ char数组形式的字符串 与输入输出的更多相关文章

  1. java 如何对由json对象构成的数组形式的字符串进行遍历?

      1.情景展示 现在已知字符串为: [{"name":"微微笑","img":"http://zos.alipayobjects ...

  2. C#字符串与char数组互转!

    字符串转换成Char数组string str="abcdefghijklmnopqretuvwxyz";char[] chars=str.ToCharArray(); char数组 ...

  3. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  4. MFC中CString转换成char数组的问题

    由于结构体中用到联合体(联合体需要确定分配内存分配大小)或其它因素,需要用char数组来保存字符串,但是在MFC中一般都是用CString来存放字条串.关于它们之间的转换,在VS2008中有时会出现异 ...

  5. C++ char数组和string类简单使用总结

    使用char数组,进行字符串的操作,是c风格的操作方式. string是C++的风格,感觉string本质上就是一个vector<char> 以下代码详细展示了字符串的常见操作 #incl ...

  6. Delphi中的各种字符串、String、PChar、Char数组

    参考博客:http://www.cnblogs.com/pchmonster/archive/2011/12/14/2287686.html 其中的所有代码均在Delphi7下测试通过. Delphi ...

  7. java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;

    <java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...

  8. 字符串(一):char 数组

    字符串使用方法整理 系列: 字符串(一):char 数组 字符串(二):string 1. 声明 如下是一个例子(=> 表示表达式等价): char a[20] = "abcd&quo ...

  9. javascript 如何打印、输出数组内容(将数组内容以字符串的形式展示出来)

        1.情景展示 在实际开发过程中,为了调试,有时我们需要看数组中具体包含了哪些数据,但是, 如果我们直接打印该数组对象,显示的结果却不是我们想要的. 如何才能将数组内容打印出来呢?(将数组内容以 ...

随机推荐

  1. C/C++经典面试题一

    1.变量的声明和定义有什么区别? 常量:在程序执行过程中,不会发生改变的量,不能被改变的量 变量:在程序执行过程中,可以被改变的量 定义变量的方式:数据类型 变量名 = 常量: int num = 1 ...

  2. 设计模式C++学习笔记之十六(Observer观察者模式)

      16.1.解释 概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. main(), IObservable,被观察者接口 CHanFei ...

  3. delete指针以后应赋值为NULL

    delete p后,只是释放了指针中存放的地址中的内存空间.但是指针变量p仍然存在(即指针p本身所占有的内存),且p中存放的地址还是原来的地址. 例如: 对一个非空指针delete后,若没有将p赋为N ...

  4. <TCP/IP>记一次关于IP地址和MAC物理地址的思考

    是的,从3月6日第一次上计算机网络课起,我还是今天第一次对这本书里讲的知识点有了自己的疑问..之前看书就是 嗯嗯这好像很有道理,嗯嗯也许再多看几章就知道它在讲什么了.. 不过今天已经自学到了网络层了, ...

  5. 利用表格分页显示数据的js组件bootstrap datatable的使用

    前面展示了datatable的简单使用,还可以通过bootstrap结合datatable来使用,这样可以进一步美化datatable插件 <!DOCTYPE html> <html ...

  6. C# 操作Excel加水印

    首先下载免费版的Excel组件- Spire.XLS,安装完成后在bin目录里面有需要用到的dll文件,引用到自己项目里面. 我这里全引进来了,一共就四个: 界面 效果 全部代码 private st ...

  7. Hystrix浅谈

    Hystrix如何使用很多说明,看了很多博客,却发现能说明一些简单概念的文章就没有. 所以本文不太回去说如何使用 Hystrix ,但是会简明的说一下 一些概念 super(Setter.withGr ...

  8. 设置外部查找工具来索引 Confluence 6

    任何网页的 crawler  工具都可以被用来索引你的 Confluence 站点中的内容.如果你希望注册用户才能够查看的内容也被索引的话,你需要为你的 Confluence 创建一个只被 crawl ...

  9. Confluence 6 附件存储提取文本文件

    当基于文本的文件上传到 Confluence(例如,Word,PowerPoint 等),这些文件中的文本是可以提取并且添加到索引中的,用户可以通过索引来搜索这些文件中的文本内容,不仅仅是搜索文件名. ...

  10. Confluence 6 选择一个默认的语言

    管理员可以设置应用到你 Confluence 站点所有空间的默认语言.请注意,一个独立的用户可以在他们自己的属性中选择他们独立的语言属性. 设定默认的语言 在 Confluence 站点中修改默认的语 ...