字符串

tech2022-07-10  164

C语言提供了字符串的定义,就是使用一对双引号包含的字符,称为字符串。例如"abcde", "123", "www.xxx.com"都表示一串字符串。

注意:C语言规定,字符串必须以'\0'字符作为最后一个字符,表示字符串的结束字符,称为:字符串结束符。字符串结束符'\0'的ASCII是0数值。

例如"abcde"这样的字符串,实际上包含6个字符,分别是:

'a','b','c','d','e','\0'

可以看到,字符串就是有多个单独的字符组成,其中,最后一个字符必须是字符串结束符'\0'。

那么,我们可以把一个字符串赋值给字符数组,如下:

char array[6] = {'a','b','c','d','e','\0'};

或者

char array[] = {'a','b','c','d','e','\0'};

对于第二种初始化方式,参考一维数组的初始化,不用指定一维数组的列数,默认的列数由初始化数据元素个数决定。程序测试例子如下:

 

程序运行结果如下:

 

可以看到,我们正确为字符数组array进行初始化,并输出字符数据元素的值。那么,字符串"abcde"等价于'a','b','c','d','e','\0'字符序列,那么,定义字符串数组可以如下:

char array[] = {"abcde"};

char array[] = "abcde";

此时,可以把一个字符串存储到有一个字符数组中。

我们介绍了字符数组的定义和使用,以及字符串的定义。在程序设计中,会频繁使用到字符串的操作,所以,对字符串的掌握非常重要。下面我们仔细详解字符串操作的知识。

6 字符串操作

6.1 字符数组的输入输出

C语言提供的printf函数中,可以使用%c输出一个字符,使用%s输出一个字符串。使用%s格式输出字符串时,是逐个输出字符数组中的每一个字符,直到遇到字符串结束符'\0'为止。在输出的字符串中,不显示字符串结束符。假设有字符串定义如下:

char buf[] = "abcde";

那么,使用%s格式输出字符串是:

printf("buf = %s\n", buf);

可以看到,直接输出字符串数组名,就会输出字符串数组中存放的每一个字符,直到遇到字符串结束符'\0'为止。程序测试例子如下:

 

程序运行结果如下:

 

可以看到,array字符数组存放一个字符串,printf函数可以使用%s格式,输出字符串数组名存放的字符串。printf函数可以使用%c格式,输出每一个字符的符号表示;每一个字符存放在内存中,是存储其ASCII值,所以,可以使用%d输出字符的ASCII数值。

C语言提供了scanf函数可以从终端接收用户输入的数据,那么,可以使用%s格式接收一串字符串。首先,我们先定义存放字符串的字符数组,如下:

char buf[128];

然后,使用scanf函数,接收用户从终端输入的字符串,格式如下:

scanf("%s", buf);

注意,buf是一个字符串数组变量,数组名代表数组内存块的首地址,所以,不需要使用取地址符“&”来获取数组变量的地址。直接使用数组名,就可以表示数组变量的地址。程序测试例子如下:

 

程序运行结果如下:

 

可以看到,我们在终端上输入“123”字符串,按下回车键表示结束输入,那么,scanf函数就获取到“123”字符串,并存放到array数组中。最后,输出array字符数组中的数据,就是我们输入终端的数据。

注意:scanf函数在接收字符串输入的过程中,遇到“空格”表示结束一个字符串的输入。所以,我们要想接收用户输入的字符串中带有空格,就应该考虑到空格结束字符串输入,使用多个字符串分开存储。程序测试例子如下:

 

程序运行结果如下:

 

可以看到,在输入“yyy xxx zzz”字符串的过程中,字符串之间有空格,表示结束输入字符串。所以,就定义多个字符数组来接收字符串数据。C语言还提供了gets/puts函数,用于输入/输出字符串。程序测试例子如下:

 

程序运行结果如下:

mylinux@ubuntu:~/src/test$ gcc test.c -o exe

mylinux@ubuntu:~/src/test$ ./exe

input =

www

output =

www

可以看到,通过gets函数可以获取用户输入的字符串数据,然后,通过puts函数输出字符数组中存放的字符串。

注意,针对字符串的操作,C语言提供多个有用的API函数,例如strcat、strcpy、strncpy、strcmp、strlen等函数,对字符串的操作非常方便。当我们讲解了函数和指针的使用之后,再深入讨论字符串的处理。这里只是先讲解字符数组的定义和使用。当有了函数的定义和指针操作概念,才有助于更深入理解字符串的操作。

最新回复(0)