• 第七章 字符串


    1、字符串的形式

    ● 用双引号括起来的字符串常量,如"CHINA",“C++ program”
    ● 存放于字符数组中,以‘\0’字符(ASCII码为0)结尾
    ● string对象。string是C++标准模板库里的一个类,专门用于处理字符串。

    2、字符串常量

    ● 字符串常量占据内存的字节数等于字符串中字符数目加1, 多出来的是结尾字符‘\0’。
    字符串 “C program” 在内存中的布局:

    ● 字符串的长度不包含’\0’
    ● “” 也是合法的字符串常量,称为“空串”, 空串仍然会占据一个字节的存储空间,存放 ‘\0’。
    ● 如果字符串常量中包含双引号,则双引号应写为‘"’。而‘\’字符在字符串中出现时,须连写两次,变成‘\’。例如:

     cout << "He said: \"I am a stu\\dent.\""; 
     => He said: "I am a stu\dent."  
    
    • 1
    • 2

    3、 用一维char数组存放字符串

    ● 包含‘\0’字符的一维char数组,就是一个字符串。其中存放的字符串 即为 ‘\0’前面的字符组成。
    ● 用char数组存放字符串,数组元素个数应该至少为字符串长度+1
    ● char数组的内容,可以在初始化时设定,也可以用C++库函数进行修改, 还可以用对数组元素赋值的办法任意改变其中的某个字符。
    ● 字符数组同样可以用cout、printf输出,用cin、scanf读入。用cin、 scanf将字符串读入字符数组时,会自动在字符数组中字符串的末尾加上 ‘\0’

    4、字符串的输入

    ● 用scanf可以将字符串读入字符数组
    ● scanf会自动添加结尾的’\0’
    ● scanf会自动添加结尾的’\0’

    char line[100];
    scanf("%s",line); //注意,不是 &line
    printf("%s",line);
    
    Fox River↙
    Fox
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ● 在数组长度不足的情况下,scanf可能导致数组越界

    char line[5]; 
    scanf("%s",line); 
    
    • 1
    • 2

    若输入"12345",则数组越界!
    ● cin输入字符串的情况和scanf相同
    ● cin.getline(char buf[], int bufSize);
    读入一行(行长度不超过bufSize-1)或bufSize-1个字符到buf, 自动添加’\0’ 回车换行符不会写入buf,但是会从输入流中去掉

    char line[10];
    cin.getline(line, sizeof(line));
    //或 cin.getline(line,10); 读入最多9个字符到 line
    cout << line;
    
    A b c↙
    A b c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5、 字符串库函数

    ● 使用字符串函数需要 #include
    ● 字符串函数都根据’\0’来判断字符串结尾
    ● 形参为char []类型,则实参可以是char数组或字符串常量
    ● 字符串拷贝 strcpy(char dest [],char src [] ); //拷贝src到dest
    ● 字符串比较大小 int strcmp(char s1 [],char s2 []); //返回0则相等
    ● 求字符串长度 int strlen(char s[]);
    ● 字符串拼接 strcat(char s1[],char s2[]); //s2拼接到s1后面
    ● 字符串转成大写 strupr(char s[]); 字符串转成小写 strlwr(char s[]);

    6、strlen常见糟糕用法

    char s[100]="test";
    for( int i = 0; i < strlen(s); ++ i ) {
    s[i] = s[i]+1; 
    }
    
    • 1
    • 2
    • 3
    • 4

    ● strlen函数的执行是需要时间的,且时间和字符串的长度成正比
    ● 每次循环,都调用strlen函数,这是效率上的很大浪费
    应取出s的长度存放在一个变量里面,然后在循环的时候使用该变量

    char s[100] = "test";
    int len = strlen(s);
    for( int i = 0; i < len; ++ i ) {
    s[i] = s[i]+1; 
    }char s[100] = "test";
    for( int i = 0; s[i]; ++ i ) {
    s[i] = s[i]+1; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    刘二大人 PyTorch深度学习实践 笔记 P7 处理多维特征的输入
    MySQL数据库更换数据路径
    wxpython:wx.grid 表格显示 Excel xlsx文件
    C++ primer 查漏补缺九:第六章 函数
    [附源码]计算机毕业设计万佳商城管理系统Springboot程序
    爬虫实战:探索XPath爬虫技巧之热榜新闻
    SpringCloud&Gateway理论与实践
    Windows使用小技巧
    洛谷 Equalize the Remainders
    永磁同步电机恒压频比(V/F)开环控制系统Matlab/Simulink仿真分析及代码生成到工程实现
  • 原文地址:https://blog.csdn.net/lylzsx20172018/article/details/128132683