C语言基础-08 字符数组、字符串

目录

一、定义字符数组

二、字符数组的初始化

三、字符串和字符串结束标志

四、字符数组的输入输出

五、使用字符串处理函数

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码

二、字符数组的初始化

三、字符串和字符串结束标志

  1. 在C语言中,是将字符串作为字符数组来处理的
  2. 为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符“\0”作为结束标志
  3. 字符串长度:字符个数+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(字符串);将字符串中小写字母换成大写字母
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值