字符/字符串的输入/输出
在写C/C++时,字符/字符串的I/O一直是一件让我非常头疼的事情。
提前声明:C字符串为char[]或char *类型,#include <string.h>
而C++字符串为string类型。#include <string>
遇到的问题:
1.初始化问题
定义C字符串时,有如下问题
char str[] = "hello world";//必须初始化 char str[3];//想要不初始化,必须指定长度 char* str;//没有分配内存,且无法用字符串常量初始化,否则报错: //"const char *" 类型的值不能用于初始化 "char *" 类型的实体
C++字符串不存在这种问题。
2.字符串长度未知。
对C字符串来说,长度未知所以无法指定长度,需要用户输入因此也不可能初始化。
解决方法只有两种:1.指定足够大的长度;2.动态分配内存。
对C++字符串来说,string类型本身就不需要指定长度,随时可以赋值初始化,不存在这种问题。
3.字符串中存在空白字符,比如空格等。
C字符串处理这种情况比较简单,单个字符依次读入,或者整个字符串读入均可。但是如果问题2,3同时出现就相当麻烦了。
单个字符依次读入可参考getchar()和cin.get()。
整个字符串读入可参考gets_s()和cin.getline()以及scanf()利用正则表达式格式化读入。//gets()已被新标准废除。
参数必须是已分配内存的字符数组。
C++字符串读入通常用cin,但是会遇到空白字符提前结束。
因此建议使用getline(cin,str,'\n') //第三个参数默认是‘\n',可以不写;第一个参数也可以是文件流
注意这里的getline()和上面的cin.getline()参数是不同的,不要混淆。