C05 C语言字符串和数组

目录

  • 数组
  • 字符串

  

数组

概念

  • 数组是有序数据的集合。
  • 数组中的每一个元素属于同一个数据类型。
  • 通过数组名和下标唯一确定数组中的元素。

 

一维数组的定义

语法格式

  数据类型   数组名[常量表达式]

  例如:int  arr[10]

  表示定义了一个整型数组,数组名为a,数组中有10个元素。

  数组的下标从0开始。

数组元素的引用

C语言规定只能逐个引用数组元素二不能一次引用整个数组。

数组元素的的表示形式为: 数组名[下标]

示例:

 

输出结果:

 

 

数组初始化

1.在定义数组时初始化

 

2.初始化部分元素值

输出

 

3.初始化全部元素值

初始化全部元素时候,可以不指定数组长度

 

4.所有元素初始化为0

 

输出

 

注意:只能限于初始化元素为0值。否则的话只是对第一个元素初始化。

 

示例

使用数组解决Fibonacci数列。

Fibonacci数列定义:数列由 0 和 1 开始,之后的系数由之前的两数相加。首几个斐波那契系数是:

0,1,1,2,3,5,8,13,21

 

输出结果:

 

 

 

二维数组的定义

语法格式

  数组名[下标][下标]

二维数组的引用

  同一维数组,通过数组名和下标确定唯一的二维数组元素。

二维数组的初始化

1.分行初始化

 

输出:

 

2.全部初始化

 

3.部分元素初始化

 

输出:

 

4.初始化全部数据时候可以不指定第一维长度

 

示例

将一个二维数组行和列的元素互换,保持到另一个二维数组中。

 

源码:

 

 

 

字符串

定义

C语言中没有定义字符串类型的数据,所以字符串是作为字符数组来处理的。字符数组的定义和使用同其他基本数据类型数组。

注意:字符数组中,C语言使用’\0’来结束一个字符串。如果一个数组包含1个以上的’\0’,则遇到第一个’\0’的时候输出结束。

使用字符串初始化字符数组

 

输出:

 

或者:

 

 

使用scanf函数接收信息初始化字符数组

 

注意,sacnf中,数组作为地址参数不需要添加”&”。

 

字符串处理函数

注意,字符串处理函数需要包含string.h文件。

例如:

#include <stdio.h>
#include <string.h>

  

puts()和gets()

语法格式:

puts(字符数组) :向终端输出字符串

gets(字符数组) :从中断获取字符串

示例:

 

 

strcat()

语法格式:

       strcat(字符数组1,字符数组2)

作用:

       把字符数组2连接到字符数组1后面,结果放在字符数组1中。

示例:

 

输出:

 

 

strcpy()和strncpy()

语法格式:

       Strcpy(字符数组1,字符串2)

作用:

将字符串2复制到字符数组1中。

示例:

 

输出:

 

注意:

1.字符数组1必须写出数组名形式;字符串2可以是字符数组名,也可以是一个字符串常量。

2.C语言中,不能使用赋值语句将一个字符串常量或者字符数组直接赋值给一个字符数组,例如以下是错误的:

 

 

3.strncpy(字符数组1,字符串2,复制长度)可以指定字符串2中的前n个字符复制到字符数组1中。

 

strcmp()

语法格式

       strcmp(字符串1,字符串2)

作用

       比较字符串1和字符串2

比较规则:

       两个字符串从左向右逐个字符比较(按照ASCII码值比较),直到出现’\0’为止。如果全部字符相同,则两个字符串相等;若出现不同的字符,则以第一个不相同的字符的比较结果为准。

示例:

 

 

 

strlen()

语法格式

       strlen(字符数组)

作用

       测量字符数组的长度,不包括’\0’。

 

strlwr()和strupr()

语法格式

  strlwr(字符串)和strupr(字符串)

作用

       把字符串转换成小写(或者大写)。

 

strcspn()

语法格式

  strcspn(字符串1,字符串2)

作用

       查找字符串2在字符串1中的位置

示例

 

 

 数据类型转换

头文件:#include <stdio.h>

sprintf()函数用于将格式化的数据写入字符串,其原型为:

int sprintf(char *str, char * format [, argument, ...]);

  

示例代码:

  sprintf(s, "%d", 123);  //把整数123打印成一个字符串保存在s中
  sprintf(s, "%8x", 4567);  //小写16进制,宽度占8个位置,右对齐    

 

 

上机练习

  • 需求描述:设计一个字符二维数组,用来存储学生信息,学生信息包括:学号,姓名、性别(男或者女)、年龄、电话、地址。
  • 提示:二维数组定义 students[10][300],从控制台接收学生信息保持到二维数组,从数组读取学生信息,显示到控制台。
  • 提示代码:

 

#include <stdio.h>
#include <string.h>

int main()
{
	int i;//循环变量
	char i_temp[30];//整数转换字符数组临时变量
	char stu_temp[300];//学生信息临时数组
	char list[10][300];//学生信息数组
	char tag[]="$";
	//初始化两个学生
	strcpy(list[0],"1001$张三$男$23$13122224444$厦门");
	strcpy(list[1],"1002$李四$女$21$13322224444$福州");

	//从控制台输入学生信息
	int id;
	char name[50];
	char gender[3];
	int age;
	char tel[14];
	char address[50];


	printf("请输入学号:");
	scanf("%d",&id);
	sprintf(i_temp,"%d",id);//学号转成字符数组
	strcpy(stu_temp,i_temp);
	strcat(stu_temp,tag);

	printf("请输入姓名:");
	scanf("%s",name);
	strcat(stu_temp,name);
	strcat(stu_temp,tag);

	printf("请输入性别:");
	scanf("%s",gender);
	strcat(stu_temp,gender);
	strcat(stu_temp,tag);

	printf("请输入年龄:");
	scanf("%d",&age);
	sprintf(i_temp,"%d",age);//年龄转成字符数组
	strcat(stu_temp,i_temp);
	strcat(stu_temp,tag);

	printf("请输入电话:");
	scanf("%s",tel);
	strcat(stu_temp,tel);
	strcat(stu_temp,tag);

	printf("请输入地址:");
	scanf("%s",address);
	strcat(stu_temp,address);
	strcat(stu_temp,tag);

	strcpy(list[2],stu_temp);

	//输出学生信息
	char temp[300];//临时变量
	for(i=0;i<3;i++){
		strcpy(temp,list[i]);
		int length=strlen(temp);
		for(int j=0;j<length;j++){
			if(temp[j]=='$'){
				temp[j]='\t';//使用制表符'\t'替换'$'
			}
		}
		printf("%s\n",temp);
	}

	return 0;
}

  

posted @ 2018-12-24 23:26  rask  阅读(728)  评论(0编辑  收藏  举报