C-风格字符串与面向行输入的一些要点
来源:互联网 发布:mac如何连续选中 编辑:程序博客网 时间:2024/04/29 23:33
C-风格字符串:(字符串储存在char数组中,并以'\0'结束)
一、初始化
利用'{}'初始化char数组:
【要手动加上'\0'字符,否则不会是为字符串】
char dog[5]={'b','e','a','u','x'};//not a string
char cat[5]={'f','a','t','s','\0'};//a string
用cout<<数组名输出:
利用字符常量初始化char数组:
【会自动添加上'\0',并且char数组长度最小为字符串长度加1('\0'),但strlen()只计算可见的字符,而不把空字符计算在内】
char fish[8]="Bubbles";
'S'与"S"区别在于后者隐含着'\0',并且"S"实际上表示字符串所在的内存地址;
二、字符串输入
面向word的读入:cin读入
1、使用空白(空格、制表符和换行符)来定界输入的字符串,所以不能作为面向行的输入;
2、并且会将回车键生成的换行留在输入队列中;(有时候可能要用get()提取留在输入队列中的换行符,才能顺利进行下次读取操作)
3、cin输入会忽略空格和换行符,可以用cin.get()输入则不会忽略空格;
4、检测到EOF后,cin将两位(eofbit和failbit)都设置为1,可以通过cin.eof()或cin.fail()的返回值判断文件(EOF)或键盘(ctrl+z)结束;
例:
#include <iostream>
using namespace std;
void main()
{
char ch;
int count=0;
cout<<"Enter the sentence:";
do
{
cin.get(ch);
cout<<ch;
count++;
}while(cin.fail()==false);//windows下模拟EOF按键:ctrl+z,或者再按下回车键
cout<<endl<<count<<" characters read!\n";
}
面向行的读入:get函数和getline函数
两个函数都有三个参数:get/getline(字符数组或字符指针,字符个数[,终止字符]);getline()读取换行符,先读取换行符随后丢弃换行符,并在输入流缓冲队列中添加'\0'代替换行符;
get()不读取换行符,也不丢弃换行符,而是将其留在输入队列中,并在输入流缓冲队列中添加'\0';
实际上get(name,Size).get()等价于getline(name,Size)
例:#include <iostream>
using namespace std;
void main()
{
const int ArSize=20;
char name[ArSize];
char dessert[ArSize];
cout<<"Enter your name:\n";
cin.getline(name,ArSize);
cout<<"Enter your favorite dessert:\n";
cin.getline(dessert,ArSize);
cout<<"I have some delicious "<<dessert<<" for you, "<<name<<".\n";
system("pause");
}
结果:
将上例中getline()用get()代替:
cin.get(name,ArSize);
cin.get(dessert,ArSize);
结果如下:
若要使用get()函数并且避免这种程序bug,可以改写:
cin.get(name,ArSize);
cin.get();//将留在输入队列中的'\n'提取出来
cin.get(dessert,ArSize);
或改写成:
cin.get(name,ArSize).get();
cin.get(dessert,ArSize).get();
注意:
老版的C++可能没有实现不接受任何参数的get()变体,但实现了接受一个char参数的get()变体
读取空行时:
cin.get()读入空行时会设置'failbit‘,之后的输入则会被无效,需要使用cin.clear()清楚'failbit'才能继续输入;
cin.getline()读入空行时不会设置‘failbit'
当输入字符串长于目标字符串时:
如果word是数组名,假设要知道字符数组word中的字符串是不是mate,下面的测试并不能像我们预期的那样:word=="mate";
原因是数组名是数组的地址,用引号括起来的字符串常量也是其地址,所以判断的是地址是否一致,而不是字符串是否相同,C-风格字符串判断要用strcmp()函数(包含在cstring库中)
- C-风格字符串与面向行输入的一些要点
- C风格字符串与c++风格字符串
- C风格的字符串
- c风格的字符串
- C风格的字符串
- c风格的字符串
- c风格字符串和string使用的一些注意点
- string 与 c 风格字符串以及字符串常量的不同
- C与C++风格字符串
- C与C++风格字符串
- c风格字符串与c++string的比较
- c风格字符串与c风格字符串数组
- c语言字符串的输入与输出的一些简单叙述
- C与C++中字符串的输入
- string 对象与 C 风格字符串的混用
- (18)C风格字符串与旧代码的接口
- c风格字符串与c++风格字符串之间转换
- c风格字符串与c++string比较
- 友善之臂视频监控方案源码学习(3) - 守护进程
- JavaScript初探之一_HelloWorld
- ViewPager实现移折通左右滑动引导界面
- asp.net mvc3.0 集成memcached
- Csharp: play media file using Microsoft.DirectX
- C-风格字符串与面向行输入的一些要点
- Csharp: play media file using Microsoft.DirectX
- 工厂方法(Factory Method)设计模式
- 友善之臂视频监控方案源码学习(2) - 主程序实现细节
- Eclipse安装SVN插件方式简明介绍
- 去隔行计划分析
- Y/C分离/2/3D滤波器
- 函数指针的用法
- 初学JDBC__第一节