C语言学习入门 (四) 字符串、字符串数组、字符和字符串相关函数

字符串简介

* 在Java中,一个字符串可以用String类型来存储

String s = "MJ";

C语言中没有String这种类型。其实字符串就是字符序列,由多个字符组成,所以在C语言中,我们可以用字符数组来存储字符串。

* 字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志‘\0‘。

‘\0‘是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。所以采用字符数组存放字符串,赋值时应包含结束标志‘\0‘。

* 字符串"mj"的存储情况如下(假设用字符数组char a[]来存储):char a[] = {‘m‘, ‘j‘, ‘\0‘};

注意了,尾部有个‘\0‘,如果没有这个结束标记,说明这个字符数组存储的并不是字符串

字符串的初始化

char a[3] = {‘m‘, ‘j‘, ‘\0‘};

char b[3];

b[0] = ‘m‘;

b[1] = ‘j‘;

b[2] = ‘\0‘;

char c[3] = "mj"; //“”初始化时,系统会自动在字符串尾部加上一个\0结束符

char d[] = "mj";

char e[20] = "mj";

使用‘’初始化时,一定记得加‘\0’,

字符串数组简介

* 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"

* 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)

* 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]

字符串数组的初始化

char names[2][10] = { {‘J‘,‘a‘,‘y‘,‘\0‘},
{‘J‘,‘i‘,‘m‘,‘\0‘} };

char names2[2][10] = { {"Jay"}, {"Jim"}
};

char names3[2][10] = {"Jay","Jim" };

字符输出函数putchar

putchar(65); // A

putchar(‘A‘); // A

int a = 65;

putchar(a); // Aputchar一次只能输出一个字符

字符输入函数getchar

char c;

c = getchar();

* getchar函数可以读入空格、TAB,直到遇到回车为止。scanf则不能读入空格和TAB。

* getchar一次只能读入一个字符。scanf则可以同时接收多个字符。

* getchar还能读入回车换行符,这时候你要敲2次回车键。第1次敲的回车换行符被getchar读入,第2次敲的回车键代表输入结束。

strlen函数 返回字符串长度不包括 \0,  计算时直到 \0为止

int size = strlen(“aab”);

strcpy函数

char s[10];

strcpy(s,"lmj");将右边的"lmj"字符串拷贝到字符数组s中 
直到拷贝到\0为止  在s的尾部肯定会保留一个\0

strcat函数

char s[20] = “hello”;    // 将右边的字符串拼接到 s的尾部,连接完毕后在s的尾部保留一个\0

strcmp函数

两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者遇见‘\0‘为止。如果全部字符都相同,则返回值为0。

如果不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差。即字符串1大于字符串2时函数返回值为正,否则为负。

strcmp(s1, “abd”);

puts函数  输出一个字符串后自动换行,一次只能输出一个字符串到‘\0’结束

char a[]={‘a’,’b’,’\0’}; puts(a); puts(“ab”);

gets函数 

系统会自动在尾部加上一个结束标记\0

char a[10];

gets(a);  一次只能读取一个字符串 ,scanf 读取可以多个

gets可以读入包含空格、tab的字符串,直到遇到回车为止;scanf不能用来读取空格、tab

gets与scanf混用时发现:先gets再scanf没事,若先scanf再gets则gets不执行了,因为先gets表示第1个就是属于它的

scanf函数

char a[10];系统会自动在尾部加上一个结束标记\0

scanf("%s", a);因为a代表它的地址,所以不需要写成&a

scanf(“%f”, &a);  scanf(“%d, %s,%f”, &a,&b,&c);   接收多个时,分隔符可以是任意符号

包括空格、tab、回车

时间: 2024-10-04 10:16:29

C语言学习入门 (四) 字符串、字符串数组、字符和字符串相关函数的相关文章

C语言学习笔记(五) 数组

数组 数组的出现就是为了解决大量同类型数据的存储和使用的问题: 数组的分类:一维数组.二维数组. 一维数组:为多个变量连续分配存储控件:所有的变量的数据类型必须相同:所有变量所占的字节大小必须相等: 例如:int a[4]; 一维数组名不代表数组中的所有元素而是代表数组中第一个元素的地址: 数组的初始化: 完全初始化: int a[4] = {1,2,3,4}; 不完全初始化: int a[4] = {1};  未被初始化的元素的值默认为0; 数组清零 int a[4] = {0}; 不初始化:

Go语言学习笔记(四) [array、slices、map]

日期:2014年7月22日 一.array[数组] 1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内容的类型. 例如: var arr[10] int arr[0] = 1 arr[1] = 2 数组值类型的:将一个数组赋值给 另一个数组,会复制所有的元素.另外,当向函数内传递一个数组的时候,它将获得一个数组的副本,而不是数组的指针. 2.数组的复合声明.a :=[3]int{1,2,3}或简写为a:=[...]i

C++语言学习(四)——类与对象

C++语言学习(四)--类与对象 一.构造函数(constructor) 1.构造函数简介 C++语言中,构造函数是与类名相同的特殊成员函数.在类对象创建时,自动调用构造函数,完成类对象的初始化.类对象本身是变量,在栈.堆上创建的对象,对象的成员初始化为随机值:在静态存储区创建的对象,对象的成员初始化为0. 2.构造函数的定义 构造函数声明的语法如下:classname(parameters);没有参数的构造函数称为无参构造函数.当类中没有定义构造函数(包括拷贝构造函数)时,编译器默认提供一个无

Swift语言学习(四)字符串与Array等集合的使用

Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提供了Array和Dictionary这两种集合类型的增强版本. 我们知道在iOS开发中用的最多的基础类型可能就数字符串了,以及一些集合类型的使用,下面我们来简单学习下字符串String以及Array.Dictionary等集合类型的使用方法 一.字符串  1.字符串的字面量 , 例如"jeck&qu

C语言中指针定义的字符串和数组定义的字符串的区别

2016-12-03 数组定义字符串: 每次定义数组的时候,系统都会在内存开辟你指定数组大小的空间,并且数组中的内容对于我们是可读可写的,看如下代码: 1 #include<stdio.h> 2 int main() 3 { 4 char str[100] = "hello world"; 5 char str1[100] = "hello world"; 6 str[0] = 'd'; 7 printf("%s\n\n",str);

【Swift学习】Swift编程之旅---字符与字符串(五)

String是swift的字符串类型.一个字符串是一个有效的字符序列,因此还可以使字符集合表示.通过+符号可以连接字符串. String 类型是一种快速.现代化的字符串实现.每一个字符串都是由独立编码的 Unicode 字符组成,并提供了用于访问这些字符在不同Unicode表示的支持.使用""来标示字符串. 一.初始化空字符串 var emptyString = "" var anotherEmptyString = String() 这2种初始化方法是等价的. i

C语言第四讲:一维数组,字符数组

数组: 定义: 数据类型 数组名[数组元素个数] = {值1,值2,....} 本质:快速定义多个 相同数据类型的变量 数组的缺点:定义出来的是 相同数据类型 的变量. 如: int c[5] = {0};//在给定数组元素个数的时候,可以按照该模式,全部赋初值为零 int a[] = {4, 5, 6};//在没有给定数组元素个数的时候,可以按照该模式,此时,一定要写清楚所有的初值. 数组元素的访问: 通过数组名加下标来访问的 如:a[1],切记下标从零开始. 注意:1,数组最后一个元素的下标

C语言学习入门

编译文件:cc -c one.c two.c  生成.o目标文件 链接文件:cc one.o two.o     默认生成 a.out 执行文件 指定生成的可执行文件名   cc -o one one.o 连续编译.链接:cc one.c      cc -o one one.c    中间生成的.o文件会被删除,最后生成执行文件 cc one.c two.c   源文件超过一个时,目标.o文件便不会被删除, 以后可以只编译更改的源文件  cc one.o two.o three.c C语言32

C语言学习入门 (五) 指针

直接引用 char a; a = 10; 程序内部是怎么操作的呢? 其实,程序对变量的读写操作,实际上是对变量所在的存储空间进行写入或取出数据.就上面的代码而言, 系统会自动将变量名a转换为变量的存储地址,根据地址找到变量a的存储空间,然后再将数据10以2进制的形式放入变量a的存储空间中. 通过变量名引用变量,由系统自动完成变量名和其存储地址之间的转换,称为变量的"直接引用"方式 间接引用 如 将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读