字符串基本概念 ——谭浩强 cpp

  • 字符数组:用来存放字符数据的数组。char str[12]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};字符个数小于开辟的大小时,后面都补′\0′。而对于char str[]={′I′,′ ′,′a′,′m′}后面不会自动补。

  • 字符串结束标志′\0′:为了测定字符串的实际长度。遇到字符′\0′就表示字符串到此结束,由它前面的字符组成字符串。strlen就是用'\0'来算字符数组长度的。而sizeof不是。

  • 字符串常量,系统会自动在所有字符的后面加一个′\0′作为结束符。例如字符串″I am happy″(是双引号,不是单引号)共有10个字符,但在内存中它共占11个字节,最后一个字节′\0′是由系统自动加上的。

    char str[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′,′\0}; <==> char str[]=″I am happy″;
    但是不等价于:char str[]={′I′,′ ′,′a′,′m′,′ ′,′h′,′a′,′p′,′p′,′y′};
    前者长度为11,后者为10
    
    • 在程序中往往依靠检测′\0′的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度
    • 字符数组并不要求它的最后一个字符为′\0′,甚至可以不包含′\0′,但是为了与字符串常量处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中有效字符的后面也人为地加上一个′\0′
    • 当字符数组的长与所赋初值的长相等时,字符中没有加'\0'时,系统会找到第一次出现'\0'的地方判断这个字符串结束,不知在哪里,所以可能会出错。
  • 字符串处理函数#include<string>或者#include<string.h>

    • 字符串连接函数strcat
      • 函数原型:char *strcat(char dest[],const char source[]);
      • 将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。
      • 第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。
      • 连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。
    • 字符串复制函数strcpy:可以实现将一个字符串赋给一个字符数组,但是不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
      • 函数原型:char *strcpy(char dest[],const char source[]);
      • 将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。
      • 第一个参数必须是数组名(如str1),第二个参数可以是字符数组名,也可以是一个字符串常量。
    • 字符串比较函数strcmp
      • 函数原型:int strcmp(const char [],const char []);
      • 比较的规则:两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
    注意:对两个字符串比较,不能用以下形式:
    if(str1>str2) cout<<″yes″;    
    字符数组名str1和str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。对两个字符串比较应该用
    if(strcmp(str1,str2)>0) cout<<″yes″;
    
    • 字符串长度函数strlen
      • 函数原型:int strlen(const char [])
      • 测试字符串长度的函数。其函数的值为字符串中的实际长度,不包括′\0′在内。
  • C++处理字符串的方法——字符串类型string

    • string并不是 cpp 语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。
    • 要使用string,必须包含头文件#include<string>,而不是#include<string.h>
      • 定义字符串变量(不需指定长度,长度随其中的字符串长度而改变。):string str1 = "hello";
      • 对字符串变量的赋值:string str2 = str1;
      • 对字符串变量中某一字符进行操作:str2[2] = 'e';,此时str2 = heelo;
      • 字符串变量的输入输出:cin>>str2; cout<<str2;
  • 字符串变量的运算

    • 字符串复制用赋值号:str2 = str1;
    • 字符串连接用加号:string str3 = "c++"; string str4 = "language"; str1 = str1+ str2; ==> str = "c++language";
    • 字符串比较直接用关系运算符:=,>,<,!=,>=,<=
  • 字符串数组string str[5] = {"zhang","wang","li","zhao","lian"};

    • 每个元素相当于一个字符串变量。
    • 并不要求每个字符串元素具有相同的长度
    • 每一个字符串元素中只包含字符串本身的字符而不包括′\0′
    • 在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。

`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值