在c当中有一种数组是由char类型构成的,其中的元素都是字符,如果这个字符数组是以字符编码0('0'字符)结尾的,那么我们就叫这个字符数组为字符串

字符串的数据常量形式是使用双引号包围的字符序列

1 字符串的声明和初始化

我们可以声明一个字符数组,然后用一个字符串赋值

char str[10] = "hello";

这里表示在内存当中开辟一块空间,大小是10个char类型的长度,同时依次的在空间当中存入字符数据,最终结束的时候添加0

这里需要注意的是,如果字符串的声明和赋值不在一条语句当中,那么就不能使用字符串常量的赋值方式,而是需要逐个字符依次赋值

#include<stdio.h>
int main(){char str[10];str = "hello";return 0;
}

这个程序会出错

正确的方式是

#include<stdio.h>
int main(){char str[10],str1[]="hello";int i=0;while(str1[i]!='0'){str[i]=str1[i];i++;}str[i]='0';printf("%s",str);return 0;
}

但是过于繁琐,所以我们一般都是直接在声明字符串的时候赋值

#include<stdio.h>
int main(){char str[10]="hello";printf("%s",str);return 0;
}

在声明字符串的时候,如果同时进行了初始化,那么可以省略字符串数组的长度,会自动计算

#include<stdio.h>
int main(){char str[]="hello";printf("%s",str);return 0;
}

这里需要注意的是字符数组的长度和其所保存的字符串的长度是不一致的

字符串的长度是字符串当中的字符个数,而字符数组长度是在内存当中准备的保存字符串的空间大小,一般字符数组的长度要大于字符串的长度

#include<stdio.h>
#include<string.h>
int main(){char str[10]="hello";printf("字符数组的长度%dn",sizeof str/sizeof(char));printf("字符串的长度%d",strlen(str));return 0;
}

这里使用了一个新的库函数strlen(),用来获取字符串的长度

输入和输出字符串的时候需要使用%s作为占位符

2 转义字符

每一个字符都会对应着一个数字,我们称之为字符编码,字符编码的集合就叫做字符集,我们在使用字符的时候可以直接使用字符的实体,也可以使用转义字符,转义字符使用开头加上一个八进制或者16进制的整数

比如说,a的ascii字符集是97,那么我们输出a的时候可以直接使用字符'a',也可以使用97的8进制

141,也可以使用16进制61

8进制直接写数字就可以,16进制在数字之前加上x

#include <stdio.h>
#include <string.h>
int main(){char c1 ='a';char c2 ='141';char c3 = 'x61';printf("%c,%c,%c",c1,c2,c3);
}

在字符串当中也可以使用转义字符,比如说

#include <stdio.h>
#include <string.h>
int main(){char str[] = "15014515415415740x77x6fx72x6cx64";printf("%s",str);return 0;
}

这里利用转义字符输出了hello world

对于可见的字符我们通常不会使用字符编码,而是直接使用字符实体,通常转义字符都是用来输出不可见的控制字符,比如说换行符,回车符,制表符,

但是去记忆不可见字符的字符编码通常会比较困难,所以常见的不可见的控制字符都会有一个简写形式

比如常用的换行符

#include <stdio.h>
#include <string.h>
int main(){char str[] = "hellonworld";printf("%s",str);return 0;
}

3 字符串处理函数

c语言当中自带了一系列的字符串处理函数,比如之前使用过的strlen(),要使用这些函数需要引入string.h头文件

标准库头文件 <cstring>​zh.cppreference.com

这里介绍几个比较常用的字符串处理函数

strcopy()

strcopy(字符串1,字符串2),把字符串2复制到字符串1当中

#include<stdio.h>
#include<string.h>
int main(){char str1[10],str2[]="hello";strcpy(str1,str2);printf("%s",str1);return 0;
}

strcat()

strcat(字符串1,字符串2),把字符串2连接到字符串的末尾

#include<stdio.h>
#include<string.h>
int main(){char str1[]="hello";char str2[]="world";strcat(str1,str2);printf("%s",str1);return 0;
}

strlen()

strlen(字符串),返回字符串的长度

#include<stdio.h>
#include<string.h>
int main(){char str1[]="hello";printf("字符串长度是%d",strlen(str1));return 0;
}

这里说的字符串长度是指在字符数组当中,从第一个字符到'0'之前的字符数量,不包括('0')

strcmp()

strcmp(字符串1,字符串2),比较字符串的大小

字符串大小的比较规则是:以各个字符对应的 ASCII 码值进行比较

strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。

如果字符串1和字符串2相同,就返回0;

如果字符串1大于字符串2,就返回返回大于 0 的值;

如果字符串1小于字符串2,就返回返回小于 0 的值;

#include <stdio.h>
#include <string.h>
int main(){char a[] = "aBcDeF";char b[] = "AbCdEf";char c[] = "aacdef";char d[] = "aBcDeF";printf("a和b的比较结果: %dn", strcmp(a, b));printf("a和c的比较结果: %dn", strcmp(a, c));printf("a和d的比较结果: %dn", strcmp(a, d));return 0;
}

printf输出字符串_c语言入门 第十二章 字符串相关推荐

  1. printf 指针地址_c语言入门 第十四章指针

    我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...

  2. 谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc

    谭浩强C语言教程第十二章-位运算 12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 1 ...

  3. c语言压缩文本文件北京理工大学,北京理工大学C语言程序设计第十二章文件.ppt...

    北京理工大学C语言程序设计第十二章文件 2000年1月25日 北京理工大学 / 第十二章 文件 第一节 文件概述 第二节 文件的处理 第三节 文件的顺序读写操作 第四节 文件的随机读写操作 第五节 文 ...

  4. printf输出字符串_C语言入门必学第一课,学习“输入与输出”!

    数据输入 编写程序的主要目的就是为了处理数据.数据从哪里来?数据的来源有很多种方式,如从磁盘文件中读取数据.从数据库中读取数据.从网页中抓取数据等,还有一种原始的方式就是从键盘输入数据. 在C语言中, ...

  5. c语言printf输出语句_C语言中另一个printf()语句中的printf()语句

    c语言printf输出语句 A printf() function is a standard library function, that is used to print the text and ...

  6. android 数组赋值字符串_c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  7. 【维生素C语言】第十二章 - C语言自定义类型讲解(联合体、枚举、联合体)

    原标题:自定义类型讲解?楼下保安大爷直呼内行!![C语言] 前言: 本章将对C语言自定义类型进行讲解,前期我们讲过结构体,这章将会把前面结构体还没讲完的知识继续补充. 一.结构体(struct) 结构 ...

  8. 直接输出代码_C语言入门 | 优秀代码(四)A—F

    文章内容摘自简书,仅供学习参考使用. A : 找好人 题目描述: 某学校有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事.四个人的回答分别是: A说:不是我 B说:是C C ...

  9. c++怎么输入带有空格的字符串_C 语言入门 11 fscanf() 函数对空格的处理

    #include

最新文章

  1. php读取binlog,PHP解析Mysql Binlog
  2. java extend 和 implements 的区别
  3. 【转载】WINCE物理和虚拟地址的问题
  4. php 多维数组怎么去重,php多维数组去重,该如何解决
  5. 902. 最短编辑距离
  6. 史上最贵黑客事件!中本聪用代码亲手杀死 1844.67 亿枚比特币!
  7. webpack快速学习1
  8. 【恋上数据结构】图代码实现、最小生成树(Prim、Kruskal)、最短路径(Dijkstra、Bellman-Ford、Floyd)
  9. Python Selenium系列学习
  10. mysql tb级数据库_4.5万字手把手教你实现MySQL TB级数据存储!!
  11. Python函数和参数
  12. 英雄联盟闪退显示无法连接服务器,英雄联盟一直闪退显示重新连接什么原因?lol崩溃进不去游戏怎么办...
  13. sspanel v3 配置的完整教程(转)
  14. 【数据结构】选择排序
  15. python 正数变成负数_Python基础之位运算符(含原码反码补码的通俗解释)
  16. 三、Reminders 读写
  17. CCL 2020闭幕,数万人见证2020年中国NLP全貌剪影
  18. h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型
  19. 2019-CVPR-上交-(DAIN)Depth-Aware Video Frame Interpolation
  20. 计算机专业职业规划模版

热门文章

  1. ORA-00600 [4194] 故障处理
  2. DM online-远大见未来 大咖讲堂丨大数据+,信息化应用与技术落地
  3. Oracle 19c 新特性:Schema Only Account详解
  4. 9块钱,构建个私有网盘,关键不限速
  5. TA能让你家的那些“哑”终端都“活”过来
  6. Web前端性能优化,应该怎么做?
  7. 为机场按上一双“慧眼”消灭飞机的“黑色十分钟”
  8. 【华为云技术分享】程序员实用JDK小工具归纳
  9. 华为云ROMA,联接企业应用的现在与未来
  10. 更适合Pythoner的标记语言Yaml学习总结