zoukankan      html  css  js  c++  java
  • 字符/字符串的输入/输出

    在写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,' ') //第三个参数默认是‘ ',可以不写;第一个参数也可以是文件流

    注意这里的getline()和上面的cin.getline()参数是不同的,不要混淆。

    暂时就想到这么多。待续……
  • 相关阅读:
    Vue学习笔记
    用vue-cli3搭建vue项目
    Vue 封装可向左向右查看图片列表的组件
    css修改整个项目的滚动条样式
    Vue 可输入可下拉组件的封装
    es6 实现数组的操作
    JS 实现兼容IE浏览器报警提示声音
    SPRINGBOOT9--AOP的使用(本例展示统一处理Web请求日志)
    SPRINGBOOT8--log4j日志记录
    SPRINGBOOT7--使用@Async实现异步调用
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/9021254.html
Copyright © 2011-2022 走看看