C语言(20)-----字符串知识点大全
一 字符数组定义和初始化
字符串在c语言中是一种常用的数值对象,用于表示若干个字符的集合。
先了解第一个关于字符的知识点,字符数组的使用,字符数组顾名思义就是元素为字符的数组,
用于存储char数据类型的数组容器。定义与使用与其他类型的数组基本一样。
字符数组的定义语法:
char 数组名[数组容量];
注: 在定义数组容量时,通常需要通过常量表示,方便维护。
关于一维数组:一维数组
eg:
#include "stdio.h" #define arr_length 10 void main() { int i = 0; /* 字符数组的定义和初始化 */ char arr[arr_length] = {'a','b','c','d','e','f','g','h','i','j'}; /* 循环输出数组元素 */
for (i=0;i程序运行结果:
char与整数是相通的,char型可以看做是字长为1的字节的整数,所以也可以用整数数组来存储字符。用整数数组会存在一个问题,就是浪费存储空间,每个char占用1个字节,而每个int则占用4个字节,这就是使用int存储char浪费空间的原因,结论就是用char数组容器存char。字符数组初始化:字符数组的初始化与其它类型数组的初始化一样,分别有三种形式:1. 指定数组容量,给每个元素初始化char arr[4]={'a','b','c','d'};2. 指定数组容量,给部分元素初始化,其余元素编译器自动初始化为0char arr[4]={'a','b'};3. 不指定数组容量初始化,编译器根据元素自动计算长度,然后给每个元素赋值cahr arr[] = {'a','b','c','d','c'};关于初始化的实例:#include "stdio.h"
#define arr_length 5 void main() { int i = 0; /* 数组3中初始化方式 */ /* 第一种: 指定数组容量,初始化全部元素 */ char arr1[arr_length] = {'a','b','c','d','e'}; /* 第二种: 指定数组容量,初始化部分元素 */ char arr2[arr_length] = {'a','b','c'}; /* 第三种: 不指定数组容量初始化 */ char arr3[] = {'a','b','c'}; printf("******第一种初始化输出******\n"); for (i=0;i
二 二维字符数组二维字符数组的定义,初始化与其它类型的二维数组一样。参考:二维数组三 字符串常量字符串常量是指用以表示字符串数据的常量,是包含在一对引号" "中的字符集合。比如:"hello,world"该字符串常量在c语言中被处理为一维字符数组存储在内存中的一块连续的区域内。但是字符串常量的存储与一维字符数组的存储是不一样的。将"hello,world"字符串常量的在内存中的存储区域如下:
定义字符数组:
char arr[] = {'h', 'e', 'l', 'l', ',', 'w', 'o', 'r', 'l', 'd'};字符数组的存储如下:
从字符串与字符数组二者的存储形式可以看出,字符串常量与字符数组存储十分相似,只是在字符串常量的存储最后多了个\0, 这个\0的作用是字符串定义结束的标识,也就是字符串的终止符。在处理字符串的时候只要遇到\0,标识该条指令处理结束,无需往下处理。eg:#include "stdio.h"
void main() {
printf("hello\0world");
}运行结果:
从运行结果可以看出,理论上应该把输出函数中双引号内容都输出,可是只输出了hello后半部分没有输出,是因为编译器在处理时遇到了\0,终止该条指令处理,直接输出hello四 字符串变量字符串变量实际就是一维字符数组,字符串变量的定义通过一维数组配合完成,使用字符串常量初始化一维数组,就可以得到一个字符串变量,格式如下:char str[15] = {"hello,world"};将内容赋值给数组str的前几个相应的内存空间,不足的自动初始化为0;当然我们可以去掉花括号{}:char str[15] = "hello,world";也可以不指定数组容量:char str[] = "hello,world";实例:#include "stdio.h"
void main() { char str1[15] = {"hello,world"}; char str2[15] = "hello,world"; char str3[] = "hello,world"; printf("%s\n",str1); printf("%s\n",str2); printf("%s\n",str3); }
运行结果:
注:字符串变量在内存中以一维数组的形式存放。五 格式化输入和输出字符串输入:通过scanf函数实现格式化输入,字符串格式符: %s。scanf语句会以字符串的形式读取数值,直到遇到空白符,比如空格符号,回车符,制表符,字符串终止符,将会停止读取。也就是说,单独说空格符的例子,如果你输入hello world,中间有空格符,当你回车后,scanf输入函数读取数值将会只读入hello这个几个字符,因为读到o之后遇到了空格,则读入结束。eg:#include "stdio.h"
void main() { char str[] = {"hello,world"}; /* 初始化的str */ printf("%s\n",str); printf("请输入字符串,然后按下回车:\n"); scanf("%s",&str); /* 输入的str,将初始化的覆盖掉 */ printf("%s\n",str);
}运行程序,然后输入想要输入的字符串,然后回车,打印出输入的字符串。输出:通过printf函数实现格式化输出,字符串格式符: %s。格式: printf("%s", str);将从str开始输出,知道遇到\0结束为止。eg:#include "stdio.h"
void main() { char str1[] = "hello,world"; char str2[] = "hello,world,你好!"; char str3[] = "hello,world\0,你好!"; printf("%s\n",str1); printf("%s\n",str2); printf("%s\n",str3);
}运行结果:
六 字符串的长度字符串长度计算的函数strlen,使用该函数需要引入头文件string.h特别注意\0为终止符的情况,长度只计算到终止符的位置。也就是说,只计算你能通过printf方法打印出来的,有效的字符串的长度。eg:#include "stdio.h"
/* 引入头文件string.h*/
#include "string.h" void main() { char str[] = {"hello,world"}; int a = 0; /* strlen的使用 */ a = strlen(str); printf("a=%d\n",a); }
运行结果:
上一篇: 互联网免费推广和付费推广的渠道
下一篇: C语言(四)指针概念的理解