字符串与字符数组

有时候会把字符数组当成字符串,其实字符串是一个新的概念,字符串不是字符数组。
接下来我来介绍字符串是什么

字符串定义:

以{ }形式定义

  • 字符数组:char word[ ] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};
  • 字符串:char word[ ] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’,‘\0’};
  • 字符串的输入输出:用%s(字符串);%c(单个字符)
    scanf读入一个单词(到空格、tap或回车为止)

注意:

  1. 字符串都是有’\0’的, 以0(整数0)结尾的一串字符
    0或'\0'是一样的,但是和’0’不同
    0标志字符串的结束,但他不是字符串的一部分
    计算字符串长度的时候不包含这个0
  2. 字符串以数组的形式存在,以数组或指针的形式访问
    更多的是以指针的形式(数组和指针有着某种关联,在《指针C语言》里有介绍)
    string.h里有很多处理字符串的函数
字符串变量

字符串也可以用两个" "来定义;" "之间的就是字符串

  • char *str = “Hello”; <==> 指针字符串
  • char word[ ] = “Hello”; <==> 数组字符串
  • char line[10] = “Hello”; <==> 数组字符串

这样定义更方便、简介;而且编译器会自动帮你在数组里加上'\0';字符串都是有'\0'结尾的,就像上面说的它不属于字符串长度。

  • 就拿char word[ ] = “Hello”; 为例:字符串长度为5,而数组长度是6,因为还有结尾的'\0',感觉是不是比用{ }定义好很多。
  • char word[ ] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’,‘\0’}; <==> char word[ ] = “Hello”;
字符串常量(字面量)

两个相邻的字符串常量会被自动连接起来 “或者633”“599结束”<==>“或者633599结束”

在这里插入图片描述

  • 指针字符串:char* s = “Hello,world!”; s是指针,它指向一个字符串常量,常量所在的地方不接受修改。
  • 如果需要修改字符串,应用数组字符串:char s[ ] = “Hello,world!”;

在这里插入图片描述

  • 从地址上看:s与s2它俩指向一个同字符串常量,常量所在的地方不接受修改。
  • 从字符串上看:s2与s3都输出了字符串'Hello',但只有s3可以修改,因为s3是创造出来的一个字符串,而s与s2都是指向本身就存在的一个字符串常量,这种常量不接收修改。
  • 同时可看出数组也可输出地址和指针相似(数组变量是特殊的指针)

推荐:

  • 如果要构造一个字符串——>数组字符串
  • 如果要处理一个字符串——>指针字符串
字符串数组
  • 字符串数组:char **a <==> a是一个指针,指向另一个指针,那个指针指向一个字符(串)
  • char a[ ][ ](得给出明确的列)<==> 二维数组
  • char *a[ ] = { "holle","world","li" } <==> 好多指针a[0]指向"hello" a[1]指向"world" a[2]指向"li"
字符串函数

有许多适用于字符串的函数;运用需要有头文件#include <string.h>
字符串函数:#include <string.h>

  • strcpy(s1, s2); <==> 复制字符串 s2 到字符串 s1。
  • strcat(s1, s2); <==> 连接字符串 s2 到字符串 s1 的末尾。
  • strlen(s1); <==> 返回字符串 s1 的长度。
    strcmp(s1, s2); <==> 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0; >- 如果 s1>s2 则返回大于 0。
  • strchr(s1, ch); <==> 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
  • strstr(s1, s2); <==> 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值