字符串与字符数组

目录

  1. 字符串的概念及其与字符的区别
  2. 字符数组的定义与使用
  3. 字符数组的初始化
  4. 字符数组的输入和输出
  5. 对字符串函数的提及

1.字符串的概念及其与字符的区别
(1)字符串是指由一对双引号(“”)括起来的字符序列。例如"你好!"“Snow_Dragon_L”等。字符串的结束标记为’\0’或’0’,因为’\0’的ASCII码值为’0’。
(2)字符为由单引号(‘’)括起来的单个字符,而字符串可以包含一个或多个字符。
(3)赋值时,我们可以把一个字符赋予一个字符变量,但不能把一个字符串(包含多个字符)赋予一个字符变量,如果硬要赋予,可能只会将该字符串的第一个字符赋予该变量。
字符串与字符数组_第1张图片
(4)字符串的输入输出格式为%s,而字符的输入输出格式则为%c。
字符串与字符数组_第2张图片
2. 字符数组的定义与使用
(1)字符数组指数组中的每一个元素的类型都为字符型,即数组的一个元素存放一个字符或者说是存放该字符的ASCII码值。
(2)字符数组的使用和其他数组一样,使用前需定义。对于一个字符串可以用一个一维数组存放与处理,多个字符串的话需要用多个一维数组或用一个二维数组来实现。

#include
int main()
{
	char str1[10];
	char str2[10][10];
}
  1. 字符数组的初始化
    字符数组的初始化与其他数组的初始化方式一样,但其有多种方式
    (1)在定义字符数组的同时进行初始化,方法为将每一个字符用单引号(‘’)括起来,每个字符间以逗号(,)分隔写在大括号中。
#include
int main()
{
	char str[10] = { 'h','e','l','l','o' };
	printf("%s\n", str);
	return 0;
}

注:

  • 代码中,数组的空间比输入元素多时,当输入元素在数组中存放结束后,其他空间用"\0"填补。
  • 当定义数组的同时初始化,数组的长度可不写,即代码中的数组str[10]的[]中常数(10)可不写,但最后需添加一个元素,即字符串结束标志"\0",否则数组将输入或输出随机值,直到随机值为"\0"时结束。
    字符串与字符数组_第3张图片

(2) 用字符串的方式对数组作初始化赋值

#include
int main()
{
	char str1[] = { "Snow_Dragon_L" };
	char str2[] = "Snow_Dragon_L";
	printf("%s\n", str1);
	printf("%s\n", str2);
	return 0;
}

注:

  • 代码中两种方式的赋值结果相同
  • 但它们比用字符逐个赋值多占一个字节的空间——用来存放’\0’(C 编译系统自动加上)。
  • 上述的代码(任一字符串数组)在内存中的实际存放情况为:
    S n o w _ D r g o _ L \0

(3)二维字符数组

#include
int main()
{
	char str1[3][12] = { "hello!","你好!","Snow_Dragon_L" };
	char str2[][12] = { "hello!","你好!","Snow_Dragon_L" };
	return 0;
}

注:

  • 二维数组的定义可理解为多个一维数组的定义
  • 上述的代码(任一字符串数组)在内存中的实际存放情况为:
h e l l o ! \0
! \0
S n o w _ D r g o _ L \0
  1. 字符数组的输入和输出
    字符数组的输入和输出可以理解为对字符数组所存储的字符串进行输入和输出操作,可以对每个字符按顺序的逐一输入或输出,也可以对整个字符串做整体处理。
    (1)初始化字符数组并按顺序逐一输出
#include
int main()
{
	int i;
	char str[] = "hello!\nSnow_Dragon_L";
	for (i = 0; str[i]!= '\0'; i++)
		printf("%c", str[i]);
	return 0;
}
  • 输出结果:
    字符串与字符数组_第4张图片
  • 注:逐个输出字符时,输出格式为’%c’。
    (2)初始化数组并按字符串方式输出
#include
int main()
{
	char str[] = "hello!\nSnow_Dragon_L";
	printf("%s\n", str);
	return 0;
}
  • 输出结果:
    字符串与字符数组_第5张图片
    注:
  • 对比逐个输出字符,按字符串输出明显效率更快,代码更少。
  • 按字符串输入或输出时,其输入或输出格式为’%s’。
    (3)按字符串方式输入和输出
#define _CRT_SECURE_NO_WARNINGS
#include
int main()
{
	char str[30];
	scanf("%s", str);
	printf("%s\n", str);
	return 0;
}

注:

  • 此处定义的数组需填写数组长度,但输入内容需比该长度少一,即为字符串结束标志’\0’留位置。
  • 用scanf函数输入内容(字符串)时,内容(字符串)不能含有空格,否则C 语言编译器将以空格作为该字符串的结束标志,导致自空格后的内容(字符串)无法输入或输出。
  • 当我们要用scanf与printf函数输入或输出多个字符串时,就需要定义多个数组,以一个空格为一个数组的结束标志,有多少空格就得定义多少数组。这会使编程的工作量变大,一般不建议用这种方法操作。
  1. 对字符串函数的提及
  • 通过前面对字符串的了解,我们会觉得输入或输出多个字符串时会很麻烦。其实C 语言有专门的字符串函数可供我们使用,使我们编写多个字符串的输入或输出时方便。
  • 对于字符串函数的分析,我在下篇文章写。

你可能感兴趣的:(c语言)