LinuxC——字符串

一、字符串的简介

字符串是一个或者多个字符的序列。

例如:"Hello world!"

【注】:双引号不是字符串的一部分,双引号只是告诉编译器它括起来的是一个字符串

在C语言中没有字符串变量类型,所以我们需要借助一个char类型的数组类存放一个字符串,并且在字符串的末尾加入一个‘\0’来标记字符串的结束。

二、定义一个字符串

这里简单地介绍一下数组,数组是由连续的存储单元组成的,字符串中的字符被存储在相邻的存储单元中,每个存储单元存储一个字符。

来看一个例子

char a[6] = "hello";

hello由五个字符组成,由于在字符串后面加上‘\0’来标记字符串的结束,所以需要给a分配6个存储单元。

同样的也可以这样定义一个字符串

char b[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
三、打印字符串

打印字符串用printf函数来打印,但是得需要用%s来告诉printf()打印的是一个字符串。

例如:

printf("%s\n", a);
四、字符串的拷贝、连接、比较

字符串的拷贝

因为字符串是存在char类型的数组中的,所以在定义好之后就不能用“=”来给这个字符串赋值了。此时如果我们想将一个字符串赋值给另一个字符串,这个时候需要使用strcpy()函数。

我们在使用一个函数的时候需要知道这个函数的返回值和参数类型,如果我们忘记了某个函数的一些属性,我们可以在ubuntu终端输入 man 函数名

例如:

man strcpy;

输入以上的内容就会自动跳到这个函数部分,我们可以看到它需要的头文件和参数类型。如图所示


现在我们就来使用这一个函数,代码如下。

#include <stdio.h>
#include <string.h>   //加入这个函数需要的头文件

int main()
{
	char a[10] = "hello";
	char b[10] = "world!";
	
	printf("before copy a = %s, b = %s\n", a, b);
	strcpy(a, b);
	printf("after copy a = %s, b = %s\n", a, b);
	return 0;
}

在使用这个函数的时候需要注意的就是,a数组的长度一定要能够容纳b数组中的内容。

执行这段代码的结果是这样的


字符串的连接

怎样将两个字符串连接成一个字符串呢,这个时候就需要用到strcat这个函数了,这个函数需要的头文件也是string.h

我们也来看一个例子:

#include <stdio.h>
#include <string.h>

int main()
{
	char a[20] = "hello ";//a数组必须能够存下连接之后的字符串,所以a需要足够大。
	char b[10] = "world";

	printf("before strcat a = %s, b = %s\n", a, b);

	strcat(a, b);

	printf("after strcat a = %s, b = %s\n", a, b);

	return 0;
}

使用这个函数的时候需要注意连接之后的字符串是存放在第一个参数中的,所以第一个参数的数组的长度得足够大,否则连接之后就会出现问题。

以下是连接之后的结果。


字符串的比较

字符串之间也能够比较大小,但是不能使用关系运算符来比较它们,要比较字符串就得借助strcmp函数。

我们一起来看看这个的返回值类型,以及参数类型等属性。

在终端输入 man strcmp


我们可以看到这个函数的返回值是一个int类型的数,然后看到return value 这一块,它对函数的返回值做了一些说明。返回一个整数来和0比较,小于, 等于或者大于0这三种情况分别对应第一个参数小于第二个参数,两个参数相同,第一个参数大于第二个参数。

同样的我们也用一个例子来说明。

#include <stdio.h>
#include <string.h>

int main()
{
	char a[5] = "abc";
	char b[5] = "abcd";
	char c[5] = "abc";
	char d[5] = "ab";


	int result1, result2, result3;

	result1 = strcmp(a, b);
	result2 = strcmp(a, c);
	result3 = strcmp(a, d);

	printf("result1 = %d\n", result1);
	printf("result2 = %d\n", result2);
	printf("result3 = %d\n", result3);
	return 0;
}

最后得到的结果是这样的


得到的数字会根据编译环境的不同而变化,但是只要小于0,就是第一个参数小于第二个参数。大于0就表示第一个参数大于第二个参数。等于0就表示这两个参数是一样的。


猜你喜欢

转载自blog.csdn.net/y____xiang/article/details/80709366