zoukankan      html  css  js  c++  java
  • 函数和c-风格字符串,string类

    1. 将c-风格字符串作为参数的函数

    如果要将字符串作为参数传递给函数,表示字符串的方式有三种:

    char 数组

    用引号引起的字符串常量

    被设置为字符串的地址的char指针,上面三种选择的类型都是char指针,因此可以作为字符串的处理函数的参数

    char ghost[15] = "galloping";(其余位置全部为'')

    char * str = "galumphing";  只有new的指针需要delete释放,防止操作内存泄漏

    int n1 = strlen(ghost);

    int n2 = strlen(str);

    int n3 = strlen("gamboling");

    strlen函数传入一个指针,统计从指针开始到非零字符的个数

    例:统计一个字符串中某个字符出现的次数

    2. 返回c-风格字符串的函数

    例:输入一个字符,扩展该字符到指定长度的字符串

     3. string

    string类将string::npos定义为字符串的最大长度

    a. 构造函数

     构造函数的测试函数

     b. string类的输入

    对于c风格的字符串,有三种方式:

    char info[100];

    cin >> info;

    cin.getline(info, 100)  // read a line ,discard

    cin.get(info, 100);  // read a line, leave in queue

    实际上上面两个函数只能读入99个字符,最后一位自动置为   

    对于string类型的对象,有两种方式

    string stuff;

    cin >> stuff;  // read a word

    getline(cin, stuff);  // read a line, discard   但是get(cin, stuff)不可用

    char* 和string类型都有一个可选参数,用于指定使用哪个字符来确定输入的边界。边界字符不会录入。

    cin.getline(info, 100, ':");

    getline(cin, stuff, ':');

    在功能上面,它们之间的主要区别在于string的版本getline()将自动调整string对象的大小,自动存储输入的字符。

    char fname[10];

    string lname;

    cin >> fname;  // could be a probelm if input size > 9 characters

    cin >> lname;  // can read a very, very long word

    cin.getline(fname, 10);  // may truncate input

    getline(cin, fname);  // no truncation

    自动调整大小的功能能让string版本的getline()不需要指定读取多少个字符的数值参数。

    另一个主要的区别在于读取c风格的字符串函数是istream函数,但是string版本是独立的函数。

    string版本的getline()函数从输入中读取字符,并将其存储在目标string中,直到发生下面三种情况之一

    到达文件尾,在这种情况下,输入流的eofbit将被设置,意味着fail()方法和eof()方法都会返回true

    遇到分界字符(默认为 ),在这种情况下,将分解字符从输入流中删除,但是不会存储它

    读取到字符数达到最大允许值(string::npos和可供分配的内存字节数中较小的那一个),在这种情况下,将设置输入流的failbit,这意味着方法fail()将返回true

    输入流对象有一个统计系统,用于跟踪流的错误状态,在这个系统中,检测到文件尾后设置eofbit寄存器,检测到输入错误时将设置failbit寄存器,出现无法识别的故障(如硬盘故障)将设置badbit寄存器,一切顺利设置goodbit寄存器

    string版本的operator<<()函数行为与此类似,它不断读取,直到遇到空白字符并将其留在输入队列中,而不是不断的读取,直到遇到分界字符将其丢弃。空白字符指空格,换行符和制表符。更直白的说,是任何将其作为参数来调用isspace()时,该函数返回true的字符。

    例:读取文件,windows系统中,c风格字符串中的\转义序列表示一个斜杠

    文件内容如下:

    程序代码如下:

     分析:第五行和第九行出现了换行原因,指定了分界符以后,换行符将被视为常规字符,因此tobuy.txt中第一行末尾的换行符将称为cottage cheese中的第一个字符,第二行末尾的字符也会成为第九个输入字符串的唯一内容。

    c. 使用字符串

     4. 字符串类型转换

     

    atoi当解析的字符超出返回类型的范围时,会自动转换为该类型能够表示的最大值或者最小值

  • 相关阅读:
    Socket Client & Server
    2台整机,多线程运行测试时间不稳定
    去了一趟宝马铁西工厂,才知道工厂已经在数字孪生
    窗帘电机测试系统调试心得
    AntDesignBlazor 学习笔记
    简单粗暴的实现 Blazor Server 登录鉴权
    Blazor 子组件与父组件通过 ChildEvents 传递数据的方法
    EasyExcel 列 固定下拉选项的做法
    Java代码在数据库存取某些敏感字段的加解密做法
    nacos 使用【一】 创建一个属于自己的配置空间
  • 原文地址:https://www.cnblogs.com/feng-ying/p/10511028.html
Copyright © 2011-2022 走看看