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当解析的字符超出返回类型的范围时,会自动转换为该类型能够表示的最大值或者最小值

  • 相关阅读:
    剑指Offer-30.连续子数组的最大和(C++/Java)
    剑指Offer-29.最小的K个数(C++/Java)
    UVA 1616 Caravan Robbers 商队抢劫者(二分)
    UVA 10570 Meeting with Aliens 外星人聚会
    UVA 11093 Just Finish it up 环形跑道 (贪心)
    UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)
    UVA 10954 Add All 全部相加 (Huffman编码)
    UVA 714 Copying Books 抄书 (二分)
    UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
    codeforecs Gym 100286B Blind Walk
  • 原文地址:https://www.cnblogs.com/feng-ying/p/10511028.html
Copyright © 2011-2022 走看看