栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 第九章 字符串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 第九章 字符串

文章目录
  • 1 字符串定义
  • 2 字符数组和字符串
    • 2.1 一维字符数组的定义和初始化
    • 2.2 二维字符数组的定义和初始化
  • 3 字符串输入输出函数
    • 3.1 通用
    • 3.2 专用
      • 3.2.1 单个字符输入输出
        • 字符输入函数getchar()/getch()
        • 字符输出函数putchar()
      • 3.2.2 字符串输入输出
        • 字符串输入函数 gets()
        • 字符串输入函数 fgets()
        • 字符串输出函数 puts( )
  • 4 字符串处理函数
    • 字符串长度计算-strlen
    • 字符串复制函数strcpy
    • 字符串链接函数-strcat
    • 字符串比较函数-strcmp

1 字符串定义

一串以’’结尾的字符在C语言中被看作字符串
用双引号括起的一串字符是字符串常量,C语言自动为其添加’’结束符,比如“hello world”

2 字符数组和字符串

C语言没有字符串数据类型,C语言中的字符串是以字符数组的形式来实现的。
字符数组,即数据类型是字符的数组char str[80];

2.1 一维字符数组的定义和初始化
  1. 用字符型数据对数组进行初始化

char str[6] = {‘C’,‘h’,‘i’,‘n’,‘a’,’’};
char str[10] = {‘C’, ‘H’, ‘I’, ‘N’, ‘A’};
如果数组没有’’,则数组不能当做字符串来处理

  1. 用字符串常量直接对数组初始化

char str[6] = {“China”};
char str[6] = “China”;
用字符串初始化数组时最后自动添加’’

  1. 注意:
    • 数组的长度必须比字符串的元素个数多1,用以存放字符串结束标志’’。例如:char c[5] = "CHINA";
    • 常用:用字符串初始化字符数组时,可以默认数组长度的定义,例如:char c[ ] = "CHINA";
    • 数组名是地址常量(它表示C语言编译系统分配给该数组连续存储空间的首地址),不能将字符串直接赋给数组名。例如:char c[6]; c = "CHINA";
2.2 二维字符数组的定义和初始化

二维数组可以看成特殊的一维数组,这个特殊的一维数组的元素又是一个一维数组。

3 字符串输入输出函数 3.1 通用
  • 单个字符的输入/输出:格式符 %c

e.g. char ch;
scanf("%c", &ch);
printf("%c", ch);

  • 字符串的整体输入/输出:格式符 %s

e.g.char str[81];
scanf("%s", str);
printf("%s", str);

  • 注意:1.参数为数组名,即数组首地址。2.scanf()函数%s格式不能读入空格、Tab、回车符,遇到空格、Tab、回车符,终止字符串输入,并写入字符串结束标志’’
3.2 专用
  • 单个字符的输入输出:格式符 %c

getchar() getch()(不回显在屏幕)
putchar()

  • 字符串的输入输出:格式符 %s

gets() fgets()
puts()

3.2.1 单个字符输入输出 字符输入函数getchar()/getch()
  • 举例:
#include 
int main()
{
    char line[81];
    char ch;
    int i = 0;

    printf("输入一行英文句子,以回车结束n");
    do
    {
        ch = getchar(); 
        line[i] = ch;   
        i++;
    } while (ch != 'n'); 
    line[i - 1] = '';   

    printf("n %sn", line); 

    return 0;
}

转载一篇好文getch getche getchar的区别和缓冲区的概念

字符输出函数putchar()

putchar()函数用于向终端输出字符,使用形式如下:
putchar(字符);

char ch = ‘X’;

putchar(ch);		

putchar(‘n’)	 
3.2.2 字符串输入输出 字符串输入函数 gets()
  • 函数原型:char *gets(char *str);

  • 功能:读入一串以回车结束的字符,顺序存入到以str为首地址的内存单元,最后写入字符串结束标志’’。

  • gets()函数和scanf()函数一样,存在潜在的安全隐患。

  • 举例:

#include 

int main(void)
{
    char name[10]; 

    printf("Enter your name:");
    gets(name); 

    printf("Hello %s!n", name); 

    return 0;
}

  • 隐患:因为由于gets()无法知道字符串的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓存溢出的安全性问题,给黑客攻击以可乘之机。可以通过fgets来代替。

字符串输入函数 fgets()
  • 函数原型:
    char *fgets(char *buf, int bufsize, FILE *stream);

  • 参数说明:

*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明buf指向的字符数组的大小
*stream: 文件结构体指针,指向将要读取的文件流。标准键盘输入流为stdin。

  • 函数功能:从stream流读取以’n’结尾的一行字符(包括’n’在内)存到缓冲区buf中,读取字符的个数最多为bufsize-1。在读取字符的末尾添加一个''组成完整的字符串。
  • 如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
  • 举例
#include 

int main(void)
{
    char name[10]; 

    printf("Enter your name:");

    fgets(name, sizeof(name), stdin);

    printf("Hello %s!n", name); 

    return 0;
}

运行结果:

原因分析:
- 当用户输入“zhang junqiang”时,超过限制大小,最多接受sizeof(name)-1个字符到字符数组中,再自动添加’’组成完整字符串。结果为“zhang jun”
- 当用户输入“li si”,fgets()函数会将包括在最后的回车符在内的所有字符读入,最后自动添加’’组成完整字符串,所以感叹号到了下一行。

字符串输出函数 puts( )
  • 函数原型:puts(char* str)
  • 功能:输出内存中从地址str起的若干字符,直到遇到’’为止,最后输出一个换行符。
  • puts()函数与printf()函数以格式符%s输出字符串的区别:前者逐个输出字符到’’结束时自动输出一个换行符,后者逐个输出字符到’’结束,不会自动输出换行符。
4 字符串处理函数
  • C语言提供了一系列字符串函数,包括字符串的
    输入输出、连接、拷贝、比较、转换等运算。
  • 使用这些函数需要在程序中包含相应的头文件string.h。
字符串长度计算-strlen

格式:strlen(字符串);

char str[10] = {“China”};
printf("%d", strlen(str));
答应出来的是实际长度5,不包括’’
可以用strlen()长度控制字符串输出

len = strlen(str);
for (i=0; i 
字符串复制函数strcpy 

str copy
格式:strcpy(目的字符串,源字符串);
注意:

  • 字符串不能用”=“整体复制,比如str2 = str1;是不成立的,因为str2代表数组地址,是地址常量,不能被赋值。
  • 要保证目的字符串足够大。
  • 调用strcpy函数时,第一个参数必须是数组名,第二个参数可以是字符数组名也可以是一个字符串常量。比如:strcpy(str1, "China");
  • 复制字符串时连同源字符串尾部的’’一并复制到目标字符串中。复制完后,目的字符串原来的相应部分会被覆盖,目的字符串更长的部分还会保留。
字符串链接函数-strcat

str catenates
格式:strcat(目的字符串,源字符串);

  • 要保证目的字符串足够大
  • 返回目的字符串首地址
  • 链接前两个字符串后都有’’,链接时会将s1后的’’覆盖,只在连接后的新字符串最后保留一个’’
  • 调用strcat函数时,第一个参数必须是数组名,第二个参数可以是字符数组名也可以是一个字符串常量。比如:strcat(str1, "China");
字符串比较函数-strcmp

str comparison
格式:strcmp(字符串1,字符串2);

  • 当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,返回其ASCII码比较的结果值
    strcmp(s1,s2)
  • 当s1>s2时,函数返回值为正值
  • 当s1=s2时,函数返回值等于0
  • 当s1
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664201.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号