字符/字符串的输入/输出

 

在写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()参数是不同的,不要混淆。

 

暂时就想到这么多。待续……
posted @ 2018-05-10 19:13  睿阳  阅读(1769)  评论(0编辑  收藏  举报