目录
一、定义字符数组
二、字符数组的初始化
三、字符串和字符串结束标志
四、字符数组的输入输出
五、使用字符串处理函数
1.输出字符串的函数
2.输入字符串的数组
六、数组中常用的字符串函数
1.strlen
2.strcat、strncat
3.strcmp
4.strcpy 、strncpy
5.sprintf
6.sscanf
7.strlwr、strupr
一、定义字符数组
1.用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。
- char一个字符占1个字节;int、float一个字符占4个字节
- c[1]=' ';空格也是一个字符型数据
2.由于字符数据是以整数形式(ASCLL代码)存放的,因此也可以用整型数组来存放字符据
- int c[10]; c[0]='a'; //其实c[0]=97; 在C语言中合法,但浪费存储空间
- char a[ ]={0,1,2,3,4,5}; //存放的是ASCLL码
二、字符数组的初始化
三、字符串和字符串结束标志
- 在C语言中,是将字符串作为字符数组来处理的
- 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符“\0”作为结束标志
- 字符串长度:字符个数+1(1代表'\0')
"C program"字符串是存放在一维数组中的,占10个字节,字符占9个字节,最后一个字节'\0'是由系统自动机上的
4.字符数组和字符串的区别:
- 字符数组存放多个字符,字符串以空字符'\0'为结束标志
- C语言中无字符串类型,用字符数组存放
- 字符数组元素用单引号' ';字符串用双引号" "
四、字符数组的输入输出
1.逐个字符输入输出。用格式符"%c"输入或输出一个字符。
2.将整个字符串一次输入或输出。用格式符"%s",意思是对字符串(string)的输入输出
- scanf("%s", ); //空格作为字符串输入分隔符,读取不到空格
- scanf函数中的输入项如果是字符数组,不要再加地址符&,因为在C语言中数组名代表该数组第一个元素的地址(或者说数组的起始地址)
- char ch[13];gets(ch); //能够读取到空格
- 在C语言中,没有二进制,有八进制(%o)、十进制(%d、%f)、十六进制(%x)
五、使用字符串处理函数
1.输出字符串的函数
puts(字符数组)
#include<stdio.h>
int main()
{
char str[]={"China\nBeijing"};
puts(str);
return 0;
}//将一个字符串(以'\0'结束的字符序列)输出到终端
2.输入字符串的数组
gets(字符数组)
gets(str) //str是已定义的字符数组
注意:用puts或gets函数只能输入或输出一个字符串
六、数组中常用的字符串函数
(需要添加 string.h 头文件)
1.strlen
- strlen计算数组的长度,遇到第一个\0之前的元素个数
#include<string.h>
#include<stdio.h>
int main(){
printf("%d\n",strlen("\t\"\086\xff\n"));
}
//结果:2
- strlen和sizeof的区别:strlen返回的是数组的元素个数;sizeof返回的是数组的长度
#include<stdio.h>
#include<string.h>
int main(){
char s[5]={0};//语法是正确的
printf("请输入一个五位数:") ;
gets(s);
size_t len = strlen(s);
printf("数组的长度是%d\n",len);
printf("数组的长度是%d\n",sizeof(s));
}
2.strcat、strncat
- strcat、strncat进行字符串的拼接
- strcat(x,y);将y字符串拼接到x字符串的后面
- strncat(x,y,n);其中n表示y数组在追加到x后面,需要添加几个字母
注:字符数组中遇到 \0 表示结束位
#include<stdio.h>
#include<string.h>
int main(){
char a[50]="hello";
char b[50]="world";
//strcat(a,b);
strncat(a,b,5);
puts(a);
}//运行结果为helloworld
3.strcmp
- strcmp 对两个字符串进行比较
- strcmp(a,b); 先比较字符串的第一个元素
- 若a字符串的第一个元素>b字符串的第一个元素,则返回一个大于零的值
- 若a字符串的第一个元素<b字符串的第一个元素,则返回一个小于零的值
- 若第一个元素相同,就比较第二个元素,直到结束如果都相同,则返回0
void main(void){
char a[50]="h";
char b[50]="H";
int x = strcmp(a,b);
printf(_Format:"%d\n",x); // h的ASCII码比H大, 结果为:1
}
4.strcpy 、strncpy
- strcpy 、strncpy 字符数组的拷贝
- strcpy(x,"aaa"); 将字符串aaa赋值到数组x中去
- strncpy(x,"012345678",n);将指定的字符串按照指定的个数n拷贝到数组x中去
#include<stdio.h>
#include<string.h>
int main(){
char a[50]="a";
char b[50]="h";
strcpy(a,"aaa");
puts(a); // 结果:aaa
strncpy(b,"0123456789",5);
puts(b); //结果:01234
}
5.sprintf
- 将任意数字转成字符串
#include<stdio.h>
#include<string.h>
int main(){
char a[50]="a";
char b[50]="123456";
sprintf(a,"%d",1234);
puts(a); //结果为1234
}
6.sscanf
- 将字符串转成任意类型的数字
#include<stdio.h>
#include<string.h>
int main(){
char a[50]="a";
char b[50]="123456";
int num =0;
sscanf(b,"%d",&num);
printf("num = %d ",num);
// 结果为num = 123456
}
注:还有fputs、fgets\strstr、strrchr、strchr函数(后面章节具体介绍)
7.strlwr、strupr
- strlwr(字符串);将字符串中大写字母换成小写字母
- strupr(字符串);将字符串中小写字母换成大写字母