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


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

    暂时就想到这么多。待续……
  • 相关阅读:
    python mysqldb 模块学习
    接口自动化学习笔记
    unittest 单元测试框架断言方法
    Python+Django+Bootstrap 框架环境搭建
    Django CSRF cookie not set.错误
    django安装与卸载
    jmeter+ant+jenkins接口自动环境搭建
    jmeter 非GUI模式下测试报错An error occurred: Unknown arg:
    非 GUI 模式运行 JMeter 压力测试
    Android SDK开发包国内下载地址
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/9021254.html
Copyright © 2020-2023  润新知